关于注解的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方法
@Repository
public class OrderDaoImpl implements OrderDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insert(Order order) {
String sql = "insert into orders values(?,?,?,?,?,?,?,?,?,?,?)";
jdbcTemplate.update(sql,order.getId(),order.getProductsId(),order.getNumber(),order.getPrice(),order.getCreateTime(),order.getSendTime(),order.getConfirmTime(),order.getConsignee(),order.getConsigneePhone(),order.getConsigneeAddress(),order.getStatus());
}
public void update(Order order) {
String sql = "update orders set create_time=?,send_time=?,confirm_time=?,consignee=?,consignee_phone=?,consignee_address=?,status=? where id=?";
jdbcTemplate.update(sql,order.getProductsId(),order.getNumber(),order.getPrice(),order.getCreateTime(),order.getSendTime(),order.getConfirmTime(),order.getConsignee(),order.getConsigneePhone(),order.getConsigneeAddress(),order.getStatus(),order.getId());
}
public void delete(String id) {
String sql = "delete from orders where id=?";
jdbcTemplate.update(sql,id);
}
public Order select(String id) {
String sql = "select form orders where id=?";
return jdbcTemplate.queryForObject(sql,new OrderRowMapper(),id);
}
public List<Order> select() {
String sql = "select form orders";
return jdbcTemplate.query(sql,new OrderRowMapper());
}
private class OrderRowMapper implements RowMapper<Order> {
public Order mapRow(ResultSet resultSet, int i) throws SQLException {
Order order=new Order();
order.setId(resultSet.getString("id"));
order.setProductsId(resultSet.getString("product_id"));
order.setNumber(resultSet.getInt("number"));
order.setPrice(resultSet.getDouble("price"));
order.setCreateTime(resultSet.getTimestamp("create_time"));
order.setSendTime(resultSet.getTimestamp("send_time"));
order.setConfirmTime(resultSet.getTimestamp("confirm_time"));
order.setConsignee(resultSet.getString("consignee"));
order.setConsigneePhone(resultSet.getString("consignee_phone"));
order.setConsigneeAddress(resultSet.getString("consignee_address"));
order.setStatus(resultSet.getString("status"));
return order;
}
}
}
JdbcTemplate就在用了@Autowired之后就可以调用方法了,为什么没有用到ApplicationContext就可以调用他的所有方法
正在回答 回答被采纳积分+1
同学,你好!关于你的第一个问题,已经在这个问答里进行了回复 https://class.imooc.com/course/qadetail/248609
关于jdbcTemplate代码的问题,你目前贴出来的类OrderDaoImpl并不是测试类,请检查一下测试类中是使用注解配置的配置文件,还是像JdbcTemplate源码一样使用的下面这种方式,或者使用其他方式直接调用的,建议将调用的代码贴出来看看。
祝学习愉快!
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星