首先理解spring的注解注入dao接口的目的是什么,是为了接口不用进行实例化就可以被任何一个类去调用
我昨天下午就是发现,不同的类,一模一样的注解,为什么前面的类可以使用注解调用mapper的sql查询,但是
第二个类死活无法执行注解进行sql查询,写一段代码,大家可能更清楚一些。
如果有两个类A和B
public class A {
[email protected]
private IBankDao bankDao;
public void getdata(){
String str = null;
//下面这一行调用接口是执行的
str = bankDao.getdate(“03003″,”15000000”);
}
}
public class B {
[email protected]
private IBankDao bankDao;
public void getdata(){
String str = null;
//下面这一行调用接口是执行的
str = bankDao.getdate(“03003″,”15000000”);
}
}
那么A类和B类都是可以调用Dao层执行mapper里面的sql语句的,但是我遇到的问题是B类嵌入A类当中
代码如下
public class A {
[email protected]
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 {
[email protected]
private IBankDao bankDao;
public void getdata(){
String str = null;
//下面这一行调用接口是执行的
str = bankDao.getdate(“03003″,”15000000”);
//使用B类调用方法注解还是不起作用
B.getdata();
}
}
public class B {
[email protected]
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 {
[email protected](name = “b”)
private B b;
[email protected]
private IBankDao bankDao;
public void getdata(){
String str = null;
str = bankDao.getdate(“03003″,”15000000”);
b.getdata();
}
}
@Service
public class B {
[email protected]
private IBankDao bankDao;
public void getdata(){
String str = null;
str = bankDao.getdate(“03003″,”15000000”);
}
}
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/17401.html