在Spring的Java配置中自动assemblybean
是否可以在用Java编写的Spring配置中使用Spring的@Autowired
批注?
例如:
@Configuration public class SpringConfiguration{ @Autowired DataSource datasource; @Bean public DataSource dataSource(){ return new dataSource(); } // ... }
显然,DataSource接口不能直接实例化,但我在这里直接实例化它是为了简化。 目前,当我尝试上述操作时,数据源对象保持为null并且不由Spring自动assembly。
我通过返回FactoryBean
让@Autowired
成功地使用Hibernate SessionFactory
对象。
所以我的问题具体说明:对于DataSource
,有没有办法做到这一点? 或者更一般地说,在Spring Java配置中自动assemblybean的方法是什么?
我应该注意到我使用的是Spring 3.2版。
如果需要在同一个@Configuration
文件中引用DataSource
bean,只需调用bean方法即可。
@Bean public OtherBean someOtherBean() { return new OtherBean(dataSource()); }
或者将它自动装入@Bean
方法
@Bean public OtherBean someOtherBean(DataSource dataSource) { return new OtherBean(dataSource); }
@Configuration
类的生命周期有时会像您建议的那样阻止自动assembly。
也许你可以使用构造函数从其他配置文件中将一些bean注入到你的配置中,而@Autowired在配置文件中可能无法正常工作
@Configuration public class AppConfig { private DataSource dataSource; public AppConfig(DataSource dataSource) { this.dataSource = dataSource; } @Bean public OtherBean otherBean(){ return new OtherBean(dataSource); } }
使用@Configuration类配置的bean无法自动assembly,
所以你不能一起使用@Autowiring和@configuration