使用spring的@autowired注解,无法实例化dao

本文探讨了在Spring框架中,不同类使用相同注解调用DAO层执行SQL查询的问题。详细分析了为何在某些情况下,注解无法正常工作,并提供了正确的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    首先理解spring的注解注入dao接口的目的是什么,是为了接口不用进行实例化就可以被任何一个类去调用

    我昨天下午就是发现,不同的类,一模一样的注解,为什么前面的类可以使用注解调用mapper的sql查询,但是

    第二个类死活无法执行注解进行sql查询,写一段代码,大家可能更清楚一些。

    如果有两个类A和B   

public class A {
  @Autowired
  private IBankDao bankDao;
  public void getdata(){
  String str = null;
  //下面这一行调用接口是执行的
  str = bankDao.getdate("03003","15000000");
  }

}

public class B {
  @Autowired
  private IBankDao bankDao;
  public void getdata(){
  String str = null;
  //下面这一行调用接口是执行的
  str = bankDao.getdate("03003","15000000");
  }
}

  那么A类和B类都是可以调用Dao层执行mapper里面的sql语句的,但是我遇到的问题是B类嵌入A类当中

代码如下

public class A {
  @Autowired
  private IBankDao bankDao;
  public void getdata(){
  String str = null;
  //下面这一行调用接口是执行的
  str = bankDao.getdate("03003","15000000");
  B b = new B();
  //使用New之后,B类的注解就不起作用了
  b.getdata();
  }
}

  此时B中的Dao层失效了,我还尝试了不使用New方法,直接使用B类调用自己的方法,但是B类要调用自己的方法,

  那么方法必须是静态的。代码如下

public class A {
  @Autowired
  private IBankDao bankDao;
  public void getdata(){
  String str = null;
  //下面这一行调用接口是执行的
  str = bankDao.getdate("03003","15000000");
  //使用B类调用方法注解还是不起作用
  B.getdata();
  }
}

public class B {
  @Autowired
  private static IBankDao bankDao;//连这个都必须变成静态了,因为上面的A类中使用B类调用自己的方法,B的getdate()方法变成静态了,

  那么private IBankDao bankDao 也必须变成静态的了 ,所以就不起作用了。

  public static void getdata(){
  String str = null;
  //下面这一行调用接口是执行的
  str = bankDao.getdate("03003","15000000");
  }
}

  看重点,大家可能已经明白了,就是有注解的类,不能new,也不能有静态方法调用dao层,正确的是下面的代码,A类和B类都可以调用dao层

public class A {
  @Resource(name = "b")
  private B b;
  @Autowired
  private IBankDao bankDao;
  public void getdata(){
  String str = null;
  str = bankDao.getdate("03003","15000000");
  b.getdata();
  }
}

@Service
public class B {
  @Autowired
  private IBankDao bankDao;
  public void getdata(){
  String str = null;
  str = bankDao.getdate("03003","15000000");
  }
}

转载于:https://www.cnblogs.com/cyb-652356/p/10683188.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值