学习三要素:是什么?为什么?怎么做?
1.是什么?为什么?
传统的控制正转:各个底层代码通过之间的关系相互依赖,控制正转的情况下,底层控制上层,从而会导致牵一发而动全身,代码维护工作量超级大;
反转:通过依赖注入,下层的依赖注入到上层,从而实现上层控制下层代码。
2.怎么做?
依赖注入的方式(自己搜一搜项目里用到哪些)
1.Setter: 实现特定属性的pubilc setter方法,来为IOC容器调用所依赖注入的对象
2.Interface: 实现特定的接口,使IOC容器注入所依赖类型的对象
3.Constructor:构造函数,实现特定参数的构造函数,在创建对象时,使IOC注入
4.Annotation: 基于注解的,通过java的注解机制,来让IOC注入依赖的对象,如autowired
看一个基于配置的实现
Spring就是小卖部,你就是A对象,水就是B对象
第一:在Spring中声明一个类:A
第二:告诉Spring,A需要B
假设A是UserAction类,而B是UserService类
<bean id="userService" class="org.leadfar.service.UserService"/>
<bean id="documentService" class="org.leadfar.service.DocumentService"/>
<bean id="orgService" class="org.leadfar.service.OrgService"/>
<bean id="userAction" class="org.leadfar.web.UserAction">
<property name="userService" ref="userService"/>
</bean>
在Spring这个商店(工厂)中,有很多对象/服务:userService,documentService,orgService,也有很多会员:userAction等等,声明userAction需要userService即可,Spring将通过你给它提供的通道主动把userService送上门来,因此UserAction的代码示例类似如下所示:
package org.leadfar.web;
public class UserAction{
private UserService userService;
public String login(){
userService.valifyUser(xxx);
}
public void setUserService(UserService userService){
this.userService = userService;
}
}
在这段代码里面,你无需自己创建UserService对象(Spring作为背后无形的手,把UserService对象通过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!),当然咯,我们也可以使用注解来注入。Spring依赖注入的实现技术是:动态代理
【这段是我抄的,原文地址(https://blog.csdn.net/qq_32575047/article/details/79056141 )】