java - 如何自动连接决定使用哪个上下文/配置文件
问题描述
场景:带有xml配置文件的 Spring Mvc 应用程序(自动扫描和设置 mvc 调度程序 - 标准配置)。还有一个带有一个 bean 的Java 配置文件(在自动扫描包中),我们称之为A。然后我们有 RestController,它使用 @autowired 注解注入 bean A,然后以某种方式在控制器旁边使用这个对象。
问题:自动装配注释如何知道在 java 带注释的配置文件中查找 bean 的位置?如果我的理解是正确的,那么控制器中用于自动装配的上下文应该从 xml 文件和所有自动扫描的类(用 Component 注释)创建 - 那么它是如何工作的以及它如何从 java 配置文件访问 bean?
解决方案
从 javadoc 的@Configuration
:
@Target(value=TYPE) @Retention(value=RUNTIME) @Documented @Component public @interface Configuration
表示一个类声明了一个或多个
@Bean
方法,并且可以由 Spring 容器处理以在运行时为这些 bean 生成 bean 定义和服务请求。
因此,当您的课程位于您的配置中定义的其中之一时,您的@Configuration
课程将被扫描。@Component
base-packages
<context:component-scan/>
XML
如果您希望@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>
笔记:
来自Spring 框架参考:
注解注入在 XML 注入之前执行。因此,XML 配置覆盖了通过这两种方法连接的属性的注释。
延伸阅读:
AnnotationConfigApplicationContext
在 Spring 框架参考中使用实例化 Spring 容器。
推荐阅读
- qt - 创建简单单色按钮的最简单方法
- javascript - 使用带有 html 的 javascript 自动光标像极地一样移动
- javascript - Javascript ES6 类 - 方法无法访问在类构造函数中定义的类属性
- node.js - 无法再在 ubuntu 上部署我的 node.js 应用程序
- oracle - oracle 空间存储弧是顺时针还是逆时针
- powerbi - 计算日期和时间差异时在 Power Bi 中排除周末
- c# - c# listbox 项目的数字顺序
- c# - EWS 发送包含用户缓存登录详细信息的电子邮件
- javascript - 如何在IOS上停止背景滚动?
- c++ - 有效地找到不在大小为 40、400 或 4000 的集合中的整数