编程杂谈

新博客:https://blog.bigdataboy.cn/article/441.htmlIoc/Ioc容器/DI需要解决的问题:解耦,不手动new对象,而是容器提供对象。使用new对象会产生高耦合,在改动代码后,必须重新编译、打包、部署Ioc(控制反转)使用对象时,有主动new产生对象转变成外部提供对象。Ioc容器外部提供对象的容器就叫Ioc容器,对象将由Ioc容器管理对象,能够管理对象的创建、初始化等一系列事情,创建后的对象被称为BeanDI(依赖注入)在容器中建立Bean与Bean之间的依赖关系,这个过程叫做依赖注入例子解决疑问:怎么实现的不用new:容器管理容器怎么知道管理什么对象:使用spring规定的xml配置文件DI怎么实现的依赖注入:配置项关联例子使用5.2.10.RELEASE版本<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.10.RELEASE</version></dependency></dependencies>创建spring配置(需要加载maven依赖后,才会有这个选项)在spring配置配置文件中添加beanid:Bean的唯一标识name:Bean的别名,多个由空格逗号分割class:后面是需要容器管理对象的路径<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--管理对象--><beanid="nameDao"class="cn.bigdataboy.dao.impl.NameDaoImpl"/></beans>使用,不用new体现在,使用nameDao对象不是new出来的packagecn.bigdataboy;importcn.bigdataboy.dao.NameDao;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;publicclassApp1{publicstaticvoidmain(String[]args){//传入配置文件路径不会这么使用,仅举例ApplicationContextcontext=newClassPathXmlApplicationContext("applicationContext.xml");//从容器获取对象NameDaonameDao=(NameDao)context.getBean("nameDao");nameDao.getName();}}业务层的处理需要依赖数据层的对象,需要使用DI处理它们的依赖配置添加属性标签并建立关联<!--管理对象--><beanid="nameDao"class="cn.bigdataboy.dao.impl.NameDaoImpl"/><beanid="NameService"class="cn.bigdataboy.service.impl.NameServiceImpl"><!--配置NameService类中依赖的beanname是NameServiceImpl类中的变量名,ref才是bean的id关联--><propertyname="nameDao"ref="nameDao"></property></bean>业务层的类也需要开启一个接口方法,方便容器进行设置publicclassNameServiceImplimplementsNameService{/***原来业务层需要new数据层进行操作*privateNameDaonameDao=newNameDaoImpl();*/privateNameDaonameDao;publicvoidsave(){System.out.println("nameservicesave...");nameDao.getName();}//相对于开个接口给容器,好能能进行设置publicvoidsetNameDao(NameDaonameDao){this.nameDao=nameDao;}}[]()相关代码:https://pan.bigdataboy.cn/s/bDrs0

2022-8-27 637 0