关于注解的bean管理方式的一些疑问
这是老师上课的例子
package com.imooc.demo3;
public class CategoryDao {
public void save(){
System.out.println("CategoryDao的save方法执行了。。。。");
}
}
package com.imooc.demo3;
public class ProductDao {
public void save(){
System.out.println("ProductDao的save方法执行了。。。。");
}
}
package com.imooc.demo3;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
public class ProductService {
@Resource(name = "categoryDao")
private CategoryDao categoryDao;
@Resource(name = "productDao")
private ProductDao productDao;
public void save(){
System.out.println("ProductService的save方法执行了。。。。");
categoryDao.save();
productDao.save();
}
}
package com.imooc.demo3;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDemo3 {
@Test
public void demo1(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
ProductService productService=(ProductService) applicationContext.getBean("productService");
productService.save();
}
}
<context:annotation-config/>
<bean id="productService" class="com.imooc.demo3.ProductService"></bean>
<bean id="categoryDao" class="com.imooc.demo3.CategoryDao"></bean>
<bean id="productDao" class="com.imooc.demo3.ProductDao"></bean>
我的问题就是在使用了
@Resource(name = "categoryDao")
private CategoryDao categoryDao;
之后categoryDao就可以调用save方法,而如果我在ProductService这个类前面加@Resourc为什么就不可以在测试类中直接调用他的save方法,却要通过applicaContext来读取xml文件之后才可以用save方法
正在回答
同学你好,在测试类中如果没有创建ApplicationContext对象,使用Spring容器管理Bean,那么用注入的方式获得到的对象是空的。在xml开了自动扫描,但运行测试方法需要加载xml文件,告诉程序要初始化Spring容器。否则ProductService类中的categoryDao和productDao属性为null。
例如不加载xml文件,如下:
运行效果如下:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星