容器的理解(一)"/>
谈谈自己对IOC容器的理解(一)
初学Java时,了解到Java是一门面向对象的语言。我感觉Java这面向对象好废,啥都要我自己弄。这跟C语言有啥区别,感觉Java也就这样了,完全体会不到面向对象的感觉,处处都是“面向过程”。网上总说面向对象修房子是去找专门修房子的人来修,面向过程是自己亲力亲为的去修。可是去找修房子的人也得有个过程,不可能无缘无故的就来了一个修房子的吧!自从接触了Spring IOC,我才知道修房子的人也会自己找上门来,不要我去找了,真nice!
1.IOC基本概念
IOC全称为Inversion of Control,翻译为控制反转,别名又叫依赖注入(DI)。从字面上你会发出疑问,IOC控制什么?反转什么?依赖又是啥东西?。
没办法文明人说话就是这么高端大气上档次。平时写Java写的最多的是什么?肯定是对象了。要不然叫啥面向对象,这不开玩笑吗?
自从有了IOC,我连对象都new不了,这脱单咱办呢?本以为没有对象,还可以new一下对象,以解忧愁。这下倒好了,我负责脱发,他负责找对象。
IOC控制: 控制的是对象的创建和管理。
IOC反转: 反转的肯定是对象,要不然对象都没了,你还能搞啥。有点像中介。
依赖: 你就是我这辈子的依赖啊!你总得告诉它你需要什么样的“女朋友”。
2.IOC的作用
苍茫的天涯,总有我的爱!就是不知道在哪里,对象new多了,都不知道那里new过对象,最近又要换个对象,以前对象怎么办,总不能占着茅坑不拉屎。所以IOC来了,来了,从此君王不早朝(我终于知道为啥每天加班)。
IOC的主要作用是: 解耦。
解耦,是降低程序耦合度,也就是减少程序代码之间的依赖性,如果代码之间的依赖性很高,修改一处代码会影响很多其他的代码,这就给项目的稳定性带来的问题,不利于代码的扩展和维护。
3.简单的实现
1.创建一个Maven
2.导入依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version>
</dependency>
3.编写代码
写一个接口:
//后宫
public interface Harem {void nafei(String name);
}
一个实现类:
//纳谁
public class Person implements Harem{@Overridepublic void nafei(String name) {System.out.println("我要纳"+name+"为妃");}
}
4.实现
4.1添加Spring配置文件
在resources目录下,添加Spring配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><bean id="person" class="com.demo.Person"></bean>
</beans>
编写一个测试类:
public static void main(String[] args) {//创建上下文ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml");//获得对象Person bean = context.getBean(Person.class);bean.nafei("妲己");}
最后可以得到这样的一个结果:
4.2注解实现IOC
给接口的实现类加上@Component注解。
//纳谁
@Component
public class Person implements Harem{@Overridepublic void nafei(String name) {System.out.println("我要纳"+name+"为妃");}
}
编写一个测试类:
@Configuration
public class Test {public static void main(String[] args) {//创建注解应用程序上下文AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Test.class);//获得对象Person bean = context.getBean(Person.class);bean.nafei("妲己");}
}
结果:
两种方式感觉注解版要方便一点。
5.参考资料
1.《Spring揭秘》
2.Spring框架(一) IOC
如有错误,还望指出!
更多推荐
谈谈自己对IOC容器的理解(一)
发布评论