使用spring的@autowired注解,無法實例化dao


    首先理解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");
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM