谈谈自己对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{
    @Override
    public void nafei(String name) {
        System.out.println("我要纳"+name+"为妃");
    }
}
4.实现
4.1添加Spring配置文件

在resources目录下,添加Spring配置文件。
在这里插入图片描述

<?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.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{
    @Override
    public 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


如有错误,还望指出!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值