https://blog.csdn.net/sinat_21843047/article/details/80297951
首先在控制反转的思想里面,有个东西叫IOC容器,所有的类都会放到里面;
现在有两个类:用户类和用户信息类;
用户类是个实体,用户信息类是另外一个实体;
传统的方式使用依赖对象(正转):
public class User {
private String address;
private String phone;
public class UserInfo {
private String userId;
private String userName;
private String age;
}
}
用户信息类是一级类(就是最基础的那些数据),用户类是二级类(用了一级类的信息);
然后用户类就依赖于用户信息类,用户信息类就称为用户类的依赖对象;
A依赖于B(A里面使用了B),则B叫做A的依赖对象;
用户类依赖于用户信息类;
所谓正转就是,在用户类里面完整地把用户信息类给写出来,然后接下来才能使用用户信息类来创建用户信息类实例;
控制反转的方式使用依赖对象(反转):
public class User {
private String address;
private String phone;
UserInfo userInfo = new UserInfo();
}
public class UserInfo {
private String userId;
private String userName;
private String age;
}
public class User {
private String address;
private String phone;
@Autowired
private UserInfo userInfo;
}
public class UserInfo {
private String userId;
private String userName;
private String age;
}
首先,所谓的依赖注入,注入依赖对象,注入,这几个词的意思,就是在控制反转的思想下使用依赖对象而已;就是反转的时候使用依赖的时候叫注入,正转的时候使用依赖对象叫使用。。。
上面两段代码都是控制反转时注入依赖对象(也就是把各个类放到IOC容器里面,要用的时候直接new一个,或者使用注解声明一个,应该也可以使用构造器创建一个),两个类没有包含关系,就只是在用户类里面用到用户信息类的时候注入了它,这个注入就是由容器找到并放入到用户类里面的,用户类什么都没干,但是在传统的方式里面,用户类就得创建用户信息类。
这张图的意思:
IOC容器里面放入了用户类,用户信息类,客户端类;
客户端类用了用户类,那么容器就在里面找用户类,找到了就创建一个用户类对象,然后注入到客户端类中,但是在创建用户类对象的时候,发现用户类里面还用到了用户信息类,那么容器又去找这个用户信息类,找到了就创建一个用户信息类对象然后注入到用户类对象中;按流程来,应该是先注入用户信息类到用户类中,然后再把用户类注入到客户端类中。
IOC容器将依赖对象注入到对象里面;(注入这个动作是容器做的,不是对象做的,如果是对象做的那就是正转了;依赖对象是基础的信息一级类,对象是用了基础信息的二级类)