我尝试使用没有xml的IoC。但我不明白为什么@Autowired在第一种情况下工作,而在第二种情况下不起作用: 我有3个班级:
@Configuration
public class DataSourceBean{
@Bean
public DataSource dataSource(){
DataSource ds = new DataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://192.168.1.99:3306/somethink");
ds.setUsername("devusr");
ds.setPassword("root");
ds.setInitialSize(5);
ds.setMaxActive(10);
ds.setMaxIdle(5);
ds.setMinIdle(2);
return ds;
}
}
public class AbstractDao {
@Autowired
private DataSource dataSource;
@Autowired
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public AbstractDao(){
System.out.println("dataSource = " + dataSource);
}
}
和
@RestController
public class PageController {
@Autowired
private DataSource dataSource;
private AbstractDao dao;
@RequestMapping(value = "/test" , method = RequestMethod.GET)
public String homePage(){
// System.out.println("$$ dataSource = " + dataSource);
AbstractDao dao = new AbstractDao();
return "";
}
}
并且在PageControllers自动装配工作正常,我发现它不为空。当我创建新的AbstractDao autowired不起作用和dataSourse == null。我尝试在AbstractDao类中添加一些注释,但它不起作用。我究竟做错了什么?以及我必须如何正确地做到这一点?感谢
答案 0 :(得分:1)
在你的PageController中你必须注入AbstractDao。使用new运算符实例化对象时,自动装配不起作用。请在PageController中尝试此操作:
@RestController
public class PageController {
@Autowired
private DataSource dataSource;
@Autowired
private AbstractDao dao;
@RequestMapping(value = "/test" , method = RequestMethod.GET)
public String homePage(){
// System.out.println("$$ dataSource = " + dataSource);
return "";
}
}