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