关于注解的bean管理方式的一些疑问

关于注解的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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕珊 2020-08-17 19:31:50

同学,你好!关于你的第一个问题,已经在这个问答里进行了回复 https://class.imooc.com/course/qadetail/248609

关于jdbcTemplate代码的问题,你目前贴出来的类OrderDaoImpl并不是测试类,请检查一下测试类中是使用注解配置的配置文件,还是像JdbcTemplate源码一样使用的下面这种方式,或者使用其他方式直接调用的,建议将调用的代码贴出来看看。

http://img1.sycdn.imooc.com//climg/5f3a6a61092d3e9f07130155.jpg

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师