[英]Why can't I use GregorianCalendar as an object type as a constructor parameter?
[英]How can I use autowired parameter in a constructor for an object that isn't Spring-ified?
我有一個問題,我的某些代碼使用Spring Bean,而某些常規的POJO。
我試圖將一個bean(數據源)注入到POJO的構造函數中(POJO是一個dao)。
代碼大致如下所示:
public class MyAppClass {
public static void main(String[] args) {
// xxx
AnnotationConfigApplicationContext context = loadSpringConfiguration();
SetupDaos setupDaosInstance = new SetupDAOs();
setupDaosInstance.setupDAOs(); // This is where DAO constructors live
}
public class SetupDAOs {
public static DaoType dao1;
// There is a reason why dao1 isn't a bean, that aren't obvious from minimal example
// Please don't post answers saying
// "you have an X-Y problem, convert dao1 into a bean"
public void setupDAOs() {
dao1 = new DaoType(); // We don't pass datasource here,
}
}
public class DaoType extends JdbcTemplate {
// This is where trouble starts
@Autowired ComboPooledDataSource dataSource;
// PROBLEM! Inside the constructor, "dataSource" isn't autowired yet!
public DaoType() {
super();
setDataSource(dataSource);
}
}
// And in one of the Bean config classes
@Bean
public ComboPooledDataSource loadDataSource() throws Exception {
上面的代碼不起作用(dataSource為null
),因為根據此問答 ,
自動裝配(沙丘評論的鏈接)在構造對象之后發生。
像這樣傳遞DataSource
應該可以:
public static void main(String[] args) {
AnnotationConfigApplicationContext context = loadSpringConfiguration();
Datasource dataSource = context.getBean(DataSource.class);
SetupDaos setupDaosInstance = new SetupDAOs(dataSource);
setupDaosInstance.setupDAOs();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.