假设一种这样的场景:A类中的一个方法需要用到B中的方法
实现这个场景要经过两个步骤
1 创建一个B的实例
2 基于这个实例调用B中的需要的方法
如下代码所示:
public class A {
poublic void importantMethod(){
B b = .....// get an instance of B // 创建一个B 的实例
b.userfulMehtod();// 基于该实例调用B中的方法
...
}
}
接下来的问题是如何创建B的实例? new么? 可如果B不是一个具体实现类而是一个接口怎么办??
好像不太好吧
还好
这件事请 让依赖注入给做了
我们是这么做的
public class A {
//1 在这里先声明ta
private B b;
public void importantMethod(){
//no need to worry about creating B anymore
// B b = ...//get an instanch of B
//2 在这里直接使用哪个有效的方法
b.usefulMthod();
...
}
//3 然后在这里再写一个set方法
//这个方法会被框架调用 一旦调用 一个B的实例就被注入进来了
public void setB(B b){
this.b = b;
}
}
当然也可以这么做:
public class A {
//1 在这里先声明ta
private B b;
//2 在这里写一个构造函数(这个构造方法会被框架调用,调用之后,一个B的实例就被注入到A类中了)
public A(B b){
this.b = b;
}
public void importantMethod(){
//no need to worry about creating B anymore
// B b = ...//get an instance of B
// 3 在这里就可以直接通过定义好的b使用B中的那个有用的方法了
b.usefulMethod();
...
}
}
还可以这么做:
public calss A {
//1 注解@Autowired
@Autowired
// 2 声明ta
private B b;
public void ImportantMethod(){
//这里直接用就可以了
b.usefulMethod();
......
}
}