java - 如何将 Spring 配置从 XML 重写为 Java
问题描述
我有这样的 Spring XML 配置文件:
<bean id="A" class="a.b.c.d.ConfigurationA" />
<bean class="a.b.c.d.ConfigurationB" />
<bean id="C" class="a.b.c.d.e.ConfigurationC" depends-on="objectFromConfigurationB" />
每个配置文件都导入其他配置类。例子:
@Configuration
@Import({ConfigA.class, ConfigB.class})
class ConfigurationA {
@Bean
public ABC abc() {
return new ABC();
}
...
...
..
}
我想将此 XML 配置重写为 Java,以保持所有关系 ( depends-on
)。我该怎么做?
我试过:
- 组件扫描
- 进口
始终相同:内部配置文件中的 bean 不会加载到 spring 上下文中。我No bean 'A' available
在启动过程中发现错误。
如何depends-on
在导入配置包期间创建关系?
解决方案
使用组件扫描,您不需要做任何事情。
@Component
class A {
}
@Component {
class B {
}
@Componet {
class C {
private final B b;
@Autowired
C(B b) {
this.b = b;
}
}
在组件 C 中使用构造函数注入可以得到你想要的,不需要依赖。如果您是较新版本的spring,您甚至不需要@Autowired
构造函数上的。
我将一个包含大约 10 个 XML spring 文件的项目转换为 Java 配置。我发现@Bean
在 @Configuration 类中编写每个定义是不必要的,我认为这会导致启动时间更快但没有任何区别。使用组件扫描可以减少代码,并使事情变得更简单。如果您在 Spring Boot 上,您需要确保正在扫描其中包含代码的包,例如,如果您有库com.example.lib
并且@SpringBootApplication
类在,com.example.app
那么 beancom.example.lib
将不会被拾取,因为默认情况下它会仅扫描您的子包com.example.app
将需要添加更多包以扫描到配置或将主 Spring Boot 应用程序类移动到com.example
推荐阅读
- r - 使用 plotly-R 更改 3d 散点图的边距
- java - Java JSCH - 在 exec 或 shell 通道中发送 EOF
- python - 为什么我的 python 函数更改系列对象的数据类型不起作用?
- mysql - 将数据库 A 中的表中的特定行插入数据库 B 中的另一个表
- function - 如何调试从 conky 调用的 lua 函数?
- arrays - Vue.js 多个复选框
- java - 如何引用 Java 中的引用?
- android - 从从 JSON 中提取的对象中获取到 TextView 的字符串
- java - 有效实施命令模式
- reactjs - 得到“道具A在B中被标记为需要,但它的价值是'未定义'。” 即使没有按要求设置