Spring - 使用其他自动装配字段初始化字段
Spring - Initialize field using other autowired field
我想解决以下问题的最佳方法是什么
我有一个具有一些依赖项和我需要的非 bean 字段的服务
@Service
public class ServiceImpl{
@Autowired
OtherService otherService;
@Autowired
DaoImpl dao;
Entity entity;
}
我需要使用 dao.getDefault()
方法初始化 "entity" 字段,这是我的方法
@Service
public class ServiceImpl{
@Autowired
OtherService otherService;
DaoImpl dao;
Entity entity;
@Autowired
public ServiceImpl(DaoImpl dao){
this.dao = dao;
entity = dao.getDefault();
}
}
混合基于构造函数和基于字段的依赖注入是一种好习惯吗?我无法使用 @PostConstruct
,因为我无权访问 spring 配置文件来启用它。感谢所有建议。
不,将构造函数注入与字段注入结合使用不是好的做法。事实上,仅使用字段注入也被认为是不好的做法。就 google "Constructor vs field injection".
所以我建议也为 otherService
使用构造函数注入。
BTW1,对所有字段使用 private
顺便说一句,@PostConstruct
应该开箱即用,无需额外配置
顺便说一句,您正在构造函数中从数据库中检索值。这通常被认为是不好的做法。
你有几种初始化 bean 的方法 Spring:
- 构造函数注入。
- 二传手注入。
- 使用@Autowired注入。
也可以通过 Java class 上的 Spring 注释组合配置样式,例如:
@Configuration
@AnnotationDrivenConfig // enable the @Autowired annotation
@ImportXml("classpath:mySpringConfigurationFile.xml")
public class MyConfig {
@Autowired
DaoImpl dao;
@Bean
public ServiceImpl myService() {
// Inject the autowired dao from XML source file.
return new ServiceImpl(dao);
}
}
您至少需要 Spring 2.5 并且 Spring post 必须设置处理器配置:
<beans>
...
<!-- JavaConfig post-processor -->
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>
</beans>
我想解决以下问题的最佳方法是什么
我有一个具有一些依赖项和我需要的非 bean 字段的服务
@Service
public class ServiceImpl{
@Autowired
OtherService otherService;
@Autowired
DaoImpl dao;
Entity entity;
}
我需要使用 dao.getDefault()
方法初始化 "entity" 字段,这是我的方法
@Service
public class ServiceImpl{
@Autowired
OtherService otherService;
DaoImpl dao;
Entity entity;
@Autowired
public ServiceImpl(DaoImpl dao){
this.dao = dao;
entity = dao.getDefault();
}
}
混合基于构造函数和基于字段的依赖注入是一种好习惯吗?我无法使用 @PostConstruct
,因为我无权访问 spring 配置文件来启用它。感谢所有建议。
不,将构造函数注入与字段注入结合使用不是好的做法。事实上,仅使用字段注入也被认为是不好的做法。就 google "Constructor vs field injection".
所以我建议也为 otherService
使用构造函数注入。
BTW1,对所有字段使用 private
顺便说一句,@PostConstruct
应该开箱即用,无需额外配置
顺便说一句,您正在构造函数中从数据库中检索值。这通常被认为是不好的做法。
你有几种初始化 bean 的方法 Spring:
- 构造函数注入。
- 二传手注入。
- 使用@Autowired注入。
也可以通过 Java class 上的 Spring 注释组合配置样式,例如:
@Configuration
@AnnotationDrivenConfig // enable the @Autowired annotation
@ImportXml("classpath:mySpringConfigurationFile.xml")
public class MyConfig {
@Autowired
DaoImpl dao;
@Bean
public ServiceImpl myService() {
// Inject the autowired dao from XML source file.
return new ServiceImpl(dao);
}
}
您至少需要 Spring 2.5 并且 Spring post 必须设置处理器配置:
<beans>
...
<!-- JavaConfig post-processor -->
<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/>
</beans>