spring框架有啥功能,Spring框架----Spring的IOC

 2023-09-28 阅读 29 评论 0

摘要:1.SpringIOC概念 图中两个代码代表了两种不同的创建对象的方式 第一种创建对象的方式,我们采用的是new的方式,在采用new的方式创建对象的时候 我们在找对象的时候,是主动的在找,应用app是直接的跟资源联系,他们之间是有必然的联系,

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="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/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>

spring框架有啥功能、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:
它在构件核心容器时,创建对象采取的思想策略是:
采用立即加载的方式,也就是说,只要一读取完配置文件,就创建配置文件中配置的对象
当我们走完那个代码的时候,它会马上读取配置文件,并且在配置的过程中使用反射的方式来把这两个对象都创建出来。
即读取完配置文件,对象就创建起来了,并且全部创建出来。

Springboot框架?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来创建对象.它很智能,可以根据对象的单例还是多例来决定立即加载还是延迟加载

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/101720.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息