java:Springbeans的真正工作原理
我是Spring的新手,我正在努力理解基本概念。从我的观点来看,一个重要的概念是SpringBean,在这里,我在完全理解它们时遇到了一个问题,因为来自internet的资源将旧的java代码(EJB)与spring注释混合在一起,对于我来说,不太清楚什么是绝对必要的
例如,我试图了解autowired在以下基本示例中的工作原理:
@Component("fooFormatter")
class FooFormatter {
public String format() {
return "foo";
}
}
class FooService {
@Autowired
private FooFormatter fooFormatter;
public void print() {
System.out.println(fooFormatter.format());
}
}
public class App{
public static void main(String [] args) {
FooService fo = new FooService();
fo.print();
}
}
我已经了解到,大体上我正在创建一个新对象,它不是由spring容器管理的,但是对象类型是FooService但是FooFormatter,我不明白为什么不起作用
再说一次,如果我使用spring注释,是否需要为bean配置添加一个文件?
我知道这是一个虚拟的问题,如果你知道一些好的资源来详细解释这一点,请把它留在这里(直到现在我还没有找到一些资源来澄清这一点)
多谢各位
# 1 楼答案
Springbean只是应用程序的主干,由IoC管理。比如实例化组装和配置。您可以使用@autowired注释来完成所有这些。并使用这两种结构,也用于松耦合
@Componenet意味着spring将自动检测到的东西
你可以使用这些链接
https://www.baeldung.com/spring-bean
https://www.journaldev.com/21429/spring-component
# 2 楼答案
了解更多细节。正如我所做的,要知道组件类何时被实例化,请创建一个空白构造函数,并在其中打印一些值
# 3 楼答案
为了让Spring在
FooService
中注入一些东西,FooService
也应该是一个可管理的bean。否则,Spring怎么会知道呢?它基本上查找由注释标记的类。如果一个类没有@Component
注释,那么Spring将不会管理这个类使用
创建一个
ApplicationContext
要个豆子
春天不是一个神奇的工具
FooService fo = new FooService();
对它没有影响。应该在某个时候创建Spring上下文,它将注册要管理的类,并且您将能够查询托管bean阅读:
docs.spring.io/spring/docs/current/spring-framework-reference是我读过的最好的文档之一。阅读“核心”部分