如何建设一个视频网站,网页视频在线提取,网页设计培训一般多少钱,厦门企业app开发控制反转的一种实现方式——依赖注入一、IoC 控制反转#xff08;Overview#xff09;依赖注入#xff08;DI#xff09;- Overview利用 IoC#xff08;控制反转#xff09;这种思想有什么好处呢#xff1f;二、依赖注入的方式setter 方式#xff08;xml配置中的proper…
控制反转的一种实现方式——依赖注入一、IoC 控制反转Overview依赖注入DI- Overview利用 IoC控制反转这种思想有什么好处呢二、依赖注入的方式setter 方式xml配置中的property标签内部Bean和外部Bean构造方式xml配置中的constructor-arg标签一、IoC 控制反转Overview
控制反转是一种设计思想也是Spring框架的核心。反转即是指本来由用户管理的Bean对象现在由框架对其进行管理。既然交给了 Spring框架 去管理那除了负责实例化之外当然也负责其Bean对象的生命周期。既然是管理Bean对象那创建完之后放哪托管呢IoC 容器。既然是设计思想那其实现方式呢依赖注入DI是其一种实现方式。
有反转就有正转正转就是指由用户去创建对象就是去 new 啦。
依赖注入DI- Overview 应用程序从 IoC Container 中获取依赖的 Bean注入到依赖的程序中这个过程称为依赖注入Dependency InjectionDI) 。 所以说控制反转是通过依赖注入实现的其实它们是同一个概念的不同角度描述。通俗来说就是IoC是设计思想DI是实现方式。 依赖注入常见的方式
构造注入set 注入
利用 IoC控制反转这种思想有什么好处呢
降低了程序的耦合度提高了其扩展力达成了软件设计的七大原则中的俩OCPOpen Close Principle开放关闭原则类、方法等对外开放修改对外关闭DIPDependency Inversion Principle依赖倒置原则通过抽象使各个类或者模块不相互影响实现松耦合。
有关七大软件设计原则的详细介绍可以看这篇博客
软件设计的七大原则
二、依赖注入的方式
构造方法注入、set 注入
IoC 有三种配置方式xml配置、Java配置、注解配置。setter 方式xml配置中的property标签
在xml配置中利用 property 标签实现 setter 方式注入具体实现
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--配置dao--bean iduserDaoBean classcom.ncpowernode.spring6.dao.UserDao/!--配置service--bean iduserServiceBean classcom.ncpowernode.spring6.service.UserService!--想让Spring 调用对应的set 方法需要配置property 标签--!--name 属性怎么指定值set 方法的方法名去掉set然后把剩下的单词首字母编小写写到这里--!--ref 翻译为引用英语单词referencesref后面指定的是bean 的id--!--set方法起名的时候不要为难自己遵循Bean规范所以name位置写属性名就可以了--property nameuserDao refuserDaoBean//bean/beansproperty 标签 name 属性值是 set方法名去掉set然后把剩下的第一个字符改为小写其余不变的字符串。 ref 属性值是 IoC容器中所对应的 Bean对象的 Id。
内部Bean和外部Bean
这里在 property 中使用了 ref 属性值去指明注入的对象这种方式属于外部Bean。
以下方式就是利用内部Bean就是property标签下利用bean子标签
property nameuserDaobean classcom.ncpowernode.spring6.dao.UserDao/
/propertyUserDao 类中封装内容 UserService 类中封装的业务内容 测试 构造方式xml配置中的constructor-arg标签
在 xml 配置中在 constructor-arg 标签下配置要注入的对象具体如下
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdbean idvipDaoBean classcom.ncpowernode.spring6.dao.VipDao/bean idvipServiceBean classcom.ncpowernode.spring6.service.VipService!--构造注入--!--index 属性指定参数下标第一个参数是0第二个参数是1以此类推ref 属性用来指定注入的bean 的id--!--指定构造方法的第一个参数下标是0--!--constructor-arg index0 refvipDaoBean/--!--根据参数的名字--constructor-arg namevipDao refvipDaoBean//bean/beansVipDao 类的封装内容
public class VipDao {private final Logger logger LoggerFactory.getLogger(VipDao.class);public void insert(){logger.info(VipDao正在保存数据);}
}VipService 类的封装业务内容
public class VipService {private VipDao vipDao;public VipService(VipDao vipDao){this.vipDao vipDao;}public void save(){vipDao.insert();}}测试