不理解 ioc java 行为
don't understand ioc java behavior
我尝试在没有 xml 的情况下使用 IoC。但我不明白为什么@Autowired 在第一种情况下工作,而在第二种情况下不起作用:
我有 3 个 classes:
@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 时,自动装配不起作用并且 dataSourse == null 。我尝试向 class AbstractDao 添加一些注释,但它不起作用。我究竟做错了什么?以及我必须如何正确地做到这一点?谢谢
在您的 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 "";
}
}
我尝试在没有 xml 的情况下使用 IoC。但我不明白为什么@Autowired 在第一种情况下工作,而在第二种情况下不起作用: 我有 3 个 classes:
@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 时,自动装配不起作用并且 dataSourse == null 。我尝试向 class AbstractDao 添加一些注释,但它不起作用。我究竟做错了什么?以及我必须如何正确地做到这一点?谢谢
在您的 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 "";
}
}