失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Spring框架----Spring的IOC

Spring框架----Spring的IOC

时间:2024-05-31 21:42:53

相关推荐

Spring框架----Spring的IOC

1.SpringIOC概念

图中两个代码代表了两种不同的创建对象的方式

第一种创建对象的方式,我们采用的是new的方式,在采用new的方式创建对象的时候

我们在找对象的时候,是主动的在找,应用app是直接的跟资源联系,他们之间是有必然的联系,是消除不掉的,资源独立就变得很难

采用第二种方式创建对象的时候,就是如下图

app断开了和资源的联系,找工厂要一个资源,由工厂负责给我们的资源取得联系,把想要的资源返回给我们的应用中,从而实现应用和资源之间的依赖关系。这是IOC。

为什么叫控制反转。

把创建对象的权力交给我们的工厂,由工厂通过固定的名称给我们找到我们想要的对象。

第一种方式,它有独立的控制权,想要谁就创建谁,而第二种方法把控制权交给了工厂,带来的好处是降低程序间的依赖关系,削减计算机的耦合。

控制反转:Inversion of Control.IOC,把创建对象的权力交给框架,是框架的重要特征,它包括依赖注入和依赖查找

明确IOC的作用:削减计算机程序的耦合,解除我们代码中的依赖关系。

它不能实现数据库增删改查,也不能实现表现层的请求参数封装,也无法接收请求,能干的事情就是解决程序间的依赖关系。

2.spring基于XML的IOC环境搭建和入门

第一个aop包,基于注解的ioc开发的必备jar包。

而jcl是把apache的日志组件继承到其开发包中,做成了自己的jar包

而beans,core,spEl,context就是spring核心容器所需的jar包。

它就是一个map,封装我们的对象。

1.新建bean.xml文件,并导入xml约束(在index.html或官网中中搜索xmlns)

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"></beans>

2.把对象的创建交给spring来管理

把对象的创建交给spring来管理,beans里面多个bean,id表示唯一标志,class表示全限定类名

<!--把对象的创建交给spring来管理,beans里面多个bean,id表示唯一标志,class表示全限定类名--><bean id="accountService" class="com.yujie.service.Impl.AccountServiceImpl"></bean><bean id="accountDao" class="com.yujie.dao.Impl.AccountDaoImpl"></bean>

3.把创建好的容器给取出来,就可以根据唯一标志来获取对象

Spring中工厂的类结构图

获取spring的IOC核心容器,并根据ID获取对象,有两种方式获取对象

第一种,拿到object类型,强转

第二种,传给字节码,用字节码转

/** 获取spring的IOC核心容器,并根据ID获取对象* */public static void main(String[] args) {//1.获取核心容器对象ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");//2.根据id获取bean对象IAccountService as=(IAccountService)ac.getBean("accountService"); //第一种,拿到object类型,强转IAccountDao adao=ac.getBean("accountDao", IAccountDao.class); //第二种,传给字节码,用字节码转System.out.println(as);System.out.println(adao);}

3. applicationContext的实现类

三个常用实现类

ClassPathXmlApplicationContext

FileSystemXmlApplicationContext

AnnotationConfigApplicationContext

ClassPathXmlApplicationContext第一个它可以加载类路径下的配置文件,要求配置文件必须在类路径下,不在的话,加载不了

FileSystemXmlApplicationContext它可以加载磁盘任意路径下的配置文件(必须有访问权限:不同操作系统不同)

AnnotationConfigApplicationContext读取注解创建容器,是明天的内容

用第二个,它会报错,我们把bean.xml扔到桌面上,并拷贝路径,粘贴进去,其他不作任何调整

4. BeanFactory和ApplicationContext的区别

核心容器的两个接口引发出的问题

ApplicationContext:

它在构件核心容器时,创建对象采取的思想策略是:

采用立即加载的方式,也就是说,只要一读取完配置文件,就创建配置文件中配置的对象

当我们走完那个代码的时候,它会马上读取配置文件,并且在配置的过程中使用反射的方式来把这两个对象都创建出来。

即读取完配置文件,对象就创建起来了,并且全部创建出来。

BeanFactory

它在构建核心容器时,创建对象采取的策略是延迟加载的方式,也就是说,什么时候根据id获取对象了,什么时候就真正的创建对象。

/*BeanFactory*/Resource resource=new ClassPathResource("bean.xml");BeanFactory factory=new XmlBeanFactory(resource);IAccountService as=(IAccountService)factory.getBean("accountService");System.out.println(as);

通过上述代码加debug即可测试,断点到了第三步的时候,还未执行创建对象。

实际开发中根据不同的情况选择不同的方法。

什么时候适合于延迟加载,什么时候适合立即加载

由于不会有类成员,因此不会有线程安全问题,我们可以使用单例模式来创建我们service和dao,进一步如果service和dao都是单例的话,任何时候都只会创建一次,因此,只要容器创建,我们就需要马上创建对象,因为它只创建一次。因此只要容器一创建,我们马上就创建对象,因为它只会创建一次,创建完就不会再创建。

单例模式适用于本次案例。

beanFactory什么时候用什么时候创建,适用于多例对象,如果我在加载容器就要创建对象,那么我第二次用又要创建对象。

Spring会根据配置不同改变其策略。实际开发中更多的使用ApplicationContext来创建对象.它很智能,可以根据对象的单例还是多例来决定立即加载还是延迟加载

如果觉得《Spring框架----Spring的IOC》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
Spring框架 IOC

Spring框架 IOC

2020-11-06

Spring框架—IoC容器

Spring框架—IoC容器

2020-05-28

Spring框架IOC之一

Spring框架IOC之一

2022-01-14

Spring框架之ioc

Spring框架之ioc

2020-10-20