场景:Spring应用程序与xml配置文件(自动扫描和设置调度器-标准配置)。还有Java配置文件(在自动存储包中)和一个bean,让我们称它为A。然后我们有了RestController,它使用@注释注入bean、、A、,然后以某种方式在控制器旁边使用这个对象。
问题:自动注释如何知道在java带注释的配置文件中查找bean的位置?如果我的理解是正确的,那么控制器中用于自动配置的上下文应该从xml文件和所有自动封装类(与组件关联)中创建--那么这是如何工作的,以及它如何从java配置文件访问bean呢?
发布于 2020-06-05 20:14:39
来自@Configuration的javadoc
@Target(value=TYPE)“保留(value=RUNTIME)”记录在案的“组件公共”接口配置 指示类声明一个或多个
@Bean方法,并且可以由Spring容器进行处理,以便在运行时为这些bean生成bean定义和服务请求。
因此,当@Configuration类在您的XML配置中用<context:component-scan/>定义的一个base-packages中时,它将被扫描为一个<context:component-scan/>。
如果希望@Configuration类在没有XML配置的情况下工作,则需要使用AnnotationConfigApplicationContext初始化上下文。
示例web.xml
<web-app>
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.acme.AppConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Declare a Spring MVC DispatcherServlet as usual -->
<servlet>
<!-- Configuration goes here -->
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>注:
来自弹簧框架参考
注释注入是在XML注入之前执行的。因此,XML配置重写了通过这两种方法连接的属性的注释。
继续阅读:
AnnotationConfigApplicationContext在Spring框架中的引用。发布于 2020-06-05 14:04:20
这是按需豆子注射..
Spring查找所有配置类,从这些类开始扫描包和XML文件以创建bean。
当扫描是否发现必须创建特定的bean时,它将尝试创建该bean,而创建时可能会遇到此bean依赖于其他bean的情况,现在它将尝试创建其他依赖bean。一旦创建了依赖bean,现在就可以使用字段注入或构造注入自动处理它们了。在创建时,还需要考虑lazy和optional bean。Spring按照他们的要求遵循bean创建路径,如果您在扫描仪中给出包名,那么这也可以创建一个循环。
例如,由于XML变得更加复杂,XML可能依赖于基于包扫描程序,反之亦然,因此spring必须遍历每个XML文件来查看如何创建该bean。
https://stackoverflow.com/questions/62216530
复制相似问题