IOC
2021/6/17 11:00:36
本文主要是介绍IOC,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
IOC
我们之前的业务中,用户的需求可能会影响我们原来代码,我们需要根据用户的需求去修改原代码,如果程序的代码量十分巨大,修改一次的成本代价十分昂贵!
原来:
private UserDao userDao=new UserDaoImpl();
我们使用一个set接口实现,已经发生了革命性的变化
private UserDao userDao; //利用set进行动态实现值的注入 public void setUserDao(UserDao userDao) { this.userDao = userDao; }
@Test public void test(){ UserService userService = new UserServiceImpl(); // ((UserServiceImpl) userService).setUserDao(new UserDaoImpl()); 可转变多个实现类 ((UserServiceImpl) userService).setUserDao(new UserDaoMysqlImpl()); userService.getUser(); }
-
之前,程序是主动创建对象,控制权在程序猿手上
-
使用了set注入后,程序不在具有主动权,而是变成了被动的接受对象
这种思想,从本质上解决了问题,我们程序猿不用再去管理对象的创建了。系统的耦合性大大降低,可以更加专注的在业务的实现上,这是IOC的原型。
本质
控制反转(IOC:Inversion of Control)不是什么技术,而是一种设计思想
DI(依赖注入)是实现IOC的一种方法。
也有人认为DI只是IOC的另一种说法,没有IOC的程序中,我们使用面向对象编程,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓的控制反转就是:获得依赖对象的方式反转了
IoC是Spring框架的核心内容,使用多种方式完美的实现IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC。
Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从IoC容器中取出需要的对象。
控制反转是一种通过描述(XML或者注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法就是依赖注入!
HelloSpring
新建一个pojo包,在包下创建一个Hello实体类
public class Hello { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Hello{" + "name='" + name + '\'' + '}'; } }
添加Spring配置文件 beans.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 使用Spring来创建对象 在Spring中这些都称为Bean Hello hell = new Hello() bean = 对象 new Hello() id=变量名 hello class=new Hello() property 相当于给对象中的属性设置一个值 ref:引用Spring容器中创建好的对象id Values: 具体的值,基本数据类型和String --> <bean id="hello" class="com.dada.pojo.Hello"> <property name="name" value="Spring"></property> </bean> </beans>
- id=变量名 hello
- class=new Hello()
- property 相当于给对象中的属性设置一个值
- ref:引用Spring容器中创建好的对象id
- Values: 具体的值,基本数据类型和String
测试代码
@Test public void test(){ //获取Spring的上下文对象 ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); //我们的对象现在都在Spring中管理了。我们要使用直接去里面取出来就可以了 Hello hello = (Hello) context.getBean("hello"); System.out.println(hello); }
Hello对象是谁创建的?
- hello对象是由Spring创建的
Hello对象的属性是怎样设置的? - 是由Spring容器设置的
- 这个过程叫做控制反转
- 控制
- 谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的。
- 反转
- 程序本身不创建对象,而变成被动的接受对象。
- 依赖注入
- 就是利用set方法进行注入的
- IoC是一种编程思想,有主动的编程变成被动的接收
- IoC:对象由容器创建、管理和配置。
这篇关于IOC的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04el-table 开启定时器下,表格的选中状态会消失是什么原因-icode9专业技术文章分享
- 2024-10-03如何安装和初始化飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03如何安装 App 并连接到飞牛 NAS?-icode9专业技术文章分享
- 2024-10-03如何安装飞牛 TV 并连接到影视服务器?-icode9专业技术文章分享
- 2024-10-03如何在PVE和ESXI上安装飞牛私有云 fnOS?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS安装系统异常情况处理-icode9专业技术文章分享
- 2024-10-03飞牛NAS如何创建存储空间?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS硬盘会自动休眠吗?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何安装飞牛影视和创建媒体库?-icode9专业技术文章分享
- 2024-10-03fnOS国产最强NAS如何为家人朋友开通影视账号?-icode9专业技术文章分享