什么是ioc(控制反转)
IOC是一种设计思想,用来降低代码与程序之间的耦合程度,把两个直接相关的事物把直接相关的部分交给第三方作为中转从而降低
了耦合性,方便后期维护。控制反转也称依赖注入,因为IoC确实不够开门见山,因此业界曾进行了广泛的讨论,最终软件界的泰斗级人物
Martin Fowler提出了DI(依赖注入:Dependency Injection)的概念用以代替IoC,即让调用类对某一接口实现类的依赖关系由第三方(容
器或协作类)注入,以移除调用类对某一接口实现类的依赖。“依赖注入”这个名词显然比“控制反转”直接明了、易于理解。
依赖注入
即由容器(如spring)负责把组件所“依赖”的具体对象“注入”(赋值)给组件,从而避免组件之间以硬编码的方式耦合在一起
public static void main(String[] args) { //找到配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //读取内容 Greeting greeting1 = (Greeting)context.getBean("greeting1"); greeting1.sayGreeting(); Greeting greeting2 = (Greeting)context.getBean("greeting2"); greeting2.sayGreeting(); }
配置文件内容如下
<?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 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd "> <!-- id为实例后对象名 class为对象的类型 --> <bean id="greeting1" class="cn.pojo.Greeting"> <!--name为对象中的属性名称 value为赋值的内容 如果属性为类类型则,使用ref属性引用id --> <property name="words"> <value>三天不打鬼子,手都不自在</value> </property> <property name="person"> <value>小兵张嘎</value> </property> </bean> <bean id="greeting2" class="cn.pojo.Greeting"> <property name="words"> <value>世界上有十种人,认识二进制和不认识二进制的</value> </property> <property name="person"> <value>Rod</value> </property> </bean> </beans>
可以看到整个实例化过程及赋值,类和对象都没有的直接关联。很大程度上提高了代码的可维护性。想一想如果我们要对属性的初始值进行改动,它给我们带来了什么好处
按照之前的写法直接写死到类中,要改的时候需要直接去类中改,但这样程序又需要重新编译一次虽然平时可能感受不到,但写项目的时候这个问题就会显而易见,而配置
文件就不存在这个问题。
结果如下
接触IOC这篇博客写的着实不咋地,虽然自己心中模模糊糊有这个概念但是要描述出来确实不容易,大家可以参考下面两篇大佬写的博客。
http://stamen.iteye.com/blog/1489223/
http://jinnianshilongnian.iteye.com/blog/1413846
原文地址:https://www.cnblogs.com/hfx123/p/9644758.html
时间: 2024-10-05 05:07:15