为什么要用spring的IOC容器管理对象,而不是new一个呢?

2023-06-28

1. Java中对象的发展历程


2.spring的IOC容器是什么?


3.为什么要使用IOC?


================================================================


1. Java中对象的发展历程


最开始我们创建对象是使用java内置的机制,也就是new一个对象,这个时候java会找到你需要创建的对象的那个类,然后调用里面的构造器构造一个对象供你使用。当你用完之后就完全不用你操心了,java内置的回收机制会自动的判断并回收摧毁无用的java对象。


这种方式有一个非常严重的弊端,对于大型的企业级应用,需要创建并管理相当多的对象的时候就会是非常痛苦的一件事情。


之后我们使用工厂模式,打个比方:


以前我们需要一个对象的时候,我们要自己找对象(new),非常耗费时间精力。


后来我们找媒婆介绍对象,这样我们就省略了找对象的过程,直接跟媒婆要对象就行了。需要的时候说一次,要一次,这就是工厂模式。这种模式也比较麻烦,应为每次需要对象的时候都要去跟工厂要,那么还有没有更加简便的方法呢?


幸运的是互联网相亲找对象兴起了。我们再也不用自己找对象,也不用去找媒婆了,直接求助与第三方机构。在相亲网站上注册一个账号,声明我是单身狗,要找对象。然后提交一个清单,我需要胖的,矮的,瘦的,高的,性感的等等各种对象。之后标注一下在哪里需要对象,比如上海一个,北京三个,成都4个。这样就万事大吉了,第三方机构会在规定的时间地点将你需要的对象送给你,你再也不需要操心找对象的事了,可以安安心心的敲代码了。


2.spring的IOC容器是什么?


spring的IOC容器就是这么一个第三方的对象管理机构,也叫仓库。在spring中,对象被称作Bean。


通过spring的相关配置文件,比如xml文件或者配置类提交你的Bean配置信息。spring收到你的配置文件之后就会存入相关Bean信息到IOC容器,之后在你的项目代码里标注你需要用到对象的地方,IOC容器发现需要Bean的地方就会自动从仓库里创建并发送Bean到需要的地方使用。这个过程叫做DI依赖注入。


spring提供了三种依赖注入的方式,自动注入,Java注解注入和xml文件配置注入。


自动化装配bean(隐式):组件扫描,自动装配


@Component:声明组件


@ComponentScan:组件扫描


@Autowired:自动装配


自动化装配当然是好用啦,可是也有它的局限性。我们可以在我们自己的项目代码里使用自动装配的注解,但是当项目引用了第三方的库呢?显然我们无法在别的库里使用到自动装配的注解。还好我们还有两种显式声明装配的方式:Java注解和xml文件


通过Java注解装配bean:


创建一个config类,在类前加@Configuration注解,声明这个类是spring的配置类


在config类里,在方法前用@Bean声明bean,默认bean id为带@Bean的方法名,也可以通过@Bean(name=" ")指定bean的名称。


带有@Bean的方法可以采用任何必要的Java功能来产生Bean实例。





通过XML装配Bean:


声明Bean:<bean id = " " , class = " " /> 




3.为什么要使用IOC?


使用IOC当然是活少,钱多,离家近啦。再也不用在项目代码里写那么多new了,相当于有了智能机器人自动帮你处理创建与管理对象的那些烦心事了。即使是重量级的企业级应用,使用spring之后管理起来也会觉得轻便了许多。