spring ioc di 怎么理解,怎么使用,为什么会有它们
5条回答 默认 最新
- liu5645849 2017-11-29 15:24关注
ioc即控制反转,粗浅点理解就是将创建bean(对象)的权利交予spring容器,让spring去控制。spring怎么控制-通过配置文件
至于使用 一个简单的例子:比如我有一个UserService接口和他的一个实现类UserServiceImpl,现在要得到UserService的一个实例,
就到spring的配置文件(xml)中配置相关信息。<bean id="userServiceId" class="com.csdn.ioc.UserServiceImpl"></bean> 其中class为UserServiceImpl的全限定名,id看测试类applicationContext.getBean("userServiceId", UserService.class)里的userServiceId 测试类: String xmlPath = "com/csdn/ioc/beans.xml"; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); UserService userService = applicationContext.getBean("userServiceId", UserService.class);
这样就得到了一个UserService的实例,在这个过程中我们自己始终都没有new过一个对象,该过程都让spring完成了!
di: 依赖注入 可以分开理解
d-依赖:在A类中有B类作为A类的一个类属性,说A类依赖B类,形成依赖关系;
i-注入:简单点理解其实就是setter注入;
想想你学java基础面向对象封装时,定义一个Person类,类里面有很多属性,要给这些属性赋值是不是需要先new Person();
然后再用对象的实例person.setxx("value")这样去给属性赋值,这个过程你就可以理解成注入;
回到spring中:依赖注入也就是将注入的任务交给spring
有一个Person接口和他的实现类PersonImpl,PersonImpl里有另一个接口Sleep做为PersonImpl的类属性
public interface Person{} public class PersonImpl implements Person{ private Sleep sleep; public void setSleep(Sleep sleep){ this.sleep = sleep; } } 配置信息,实现注入 <bean id="person" class="com.csdn.di.PersonImpl"> <property name="sleep" ref="sleepId"></property> </bean> <bean id="sleepId" class="con.csdn.di.SleepImpl"></bean> 这样就将Sleep的实例注入到了PersonImpl中的类属性中了
一个bean标签就时创建一个实例
property就是设置属性,name属性的值就是类属性名,ref属性的值就是作为类属性那个类bean标签里的id;至于为什么要用他们,你会用了,用多了自然就知道为什么了
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 docker环境配置
- ¥20 绿盟安全扫描--检测到目标站点存在javascript框架库漏洞
- ¥30 Android STD快速启动
- ¥15 如何使用simulink建立一个永磁同步直线电机模型?
- ¥30 天体光谱图的的绘制并得到星表
- ¥15 PointNet++的onnx模型只能使用一次
- ¥20 西南科技大学数字信号处理
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现