首页 > 其他分享 >IOC

IOC

时间:2022-08-21 17:55:59浏览次数:39  
标签:ApplicationContext 调用 配置文件 Spring 接口 Bean IOC

概念

Spring 通过一个配置文件描述 Bean 及 Bean 之间的依赖关系,利用 Java 语言的反射功能实例化 Bean
并建立 Bean 之间的依赖关系。 Spring 的 IoC 容器在完成这些底层工作的基础上,还提供了 Bean 实例
缓存、生命周期管理、 Bean 实例代理、事件发布、资源装载等高级服务。

作用域

别为 singleton(单例)、prototype(原型)、 request、session 和 global session

Spring Bean 生命周期

ioc生命周期.png

实例化
1. 实例化一个 Bean,也就是我们常说的 new。
IOC 依赖注入
2. 按照 Spring 上下文对实例化的 Bean 进行配置,也就是 IOC 注入。
setBeanName 实现
3. 如果这个 Bean 已经实现了 BeanNameAware 接口,会调用它实现的 setBeanName(String) 方
法,此处传递的就是 Spring 配置文件中 Bean 的 id 值
BeanFactoryAware 实现
4. 如果这个 Bean 已经实现了 BeanFactoryAware 接口,会调用它实现的 setBeanFactory,
setBeanFactory(BeanFactory)传递的是 Spring 工厂自身(可以用这个方式来获取其它 Bean,只
需在 Spring 配置文件中配置一个普通的 Bean 就可以)。
ApplicationContextAware 实现
5. 如果这个 Bean 已经实现了 ApplicationContextAware 接口,会调用
setApplicationContext(ApplicationContext)方法,传入 Spring 上下文(同样这个方式也可以实现
步骤 4 的内容,但比 4 更好,因为 ApplicationContext 是 BeanFactory 的子接口,有更多的实现
方法)
postProcessBeforeInitialization接口实现-初始化预处理
6. 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用
postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor 经常被用
作是 Bean 内容的更改,并且由于这个是在 Bean 初始化结束时调用那个的方法,也可以被应用于内存
或缓存技术。
init-method
7. 如果 Bean 在 Spring 配置文件中配置了 init-method 属性会自动调用其配置的初始化方法。
postProcessAfterInitialization
8. 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用
postProcessAfterInitialization(Object obj, String s)方法。
注:以上工作完成以后就可以应用这个 Bean 了,那这个 Bean 是一个 Singleton 的,所以一般情况下
我们调用同一个 id 的 Bean 会是在内容地址相同的实例,当然在 Spring 配置文件中也可以配置非
Singleton。
Destroy 过期自动清理阶段
9. 当 Bean 不再需要时,会经过清理阶段,如果 Bean 实现了 DisposableBean 这个接口,会调用那
个其实现的 destroy()方法; destroy-method 自配置清理
10. 最后,如果这个 Bean 的 Spring 配置中配置了 destroy-method 属性,会自动调用其配置的销毁
方法。
11. bean 标签有两个重要的属性(init-method 和 destroy-method)。用它们你可以自己定制初始化
和注销方法。它们也有相应的注解(@PostConstruct 和@PreDestroy)。

Spring 依赖注入四种方式

构造器注入
/*带参数,方便利用构造器进行注入*/ 
public CatDaoImpl(String message){ this. message = message; } 
<bean id="CatDaoImpl" class="com.CatDaoImpl"> <constructor-arg value=" message "></constructor-arg> </bean>

setter方法注入
<bean id="id" class="com.id "> <property name="id" value="123"></property> </bean>

静态工厂
//factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法 
<bean name="springAction" class=" SpringAction" > 
<!--使用静态工厂的方法注入对象,对应下面的配置文件--> 
<property name="staticFactoryDao" ref="staticFactoryDao"></property> </bean> 
<!--此处获取对象的方式是从工厂类中获取静态方法--> 
<bean name="staticFactoryDao" class="DaoFactory" factory- method="getStaticFactoryDaoImpl"></bean>

实例工厂
<bean name="springAction" class="SpringAction"> 
<!--使用实例工厂的方法注入对象,对应下面的配置文件--> 
<property name="factoryDao" ref="factoryDao"></property> </bean> 
<!--此处获取对象的方式是从工厂类中获取实例方法--> 
<bean name="daoFactory" class="com.DaoFactory"></bean> 
<bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>

5 种不同方式的自动装配

1. no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
2. byName:通过参数名 自动装配,Spring容器在配置文件中发现bean的autowire 属性被设置成
byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。 3. byType:通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被设置成
byType,之后容器试图匹配、装配和该bean的属性具有相同类型的bean。如果有多个 bean 符合
条件,则抛出错误。
4. constructor:这个方式类似于 byType, 但是要提供给构造器参数,如果没有确定的带参数的构造
器参数类型,将会抛出异常。
5. autodetect:首先尝试使用constructor 来自动装配,如果无法工作,则使用byType方式。

ApplicationContext 面向开发应用

1. ClassPathXmlApplicationContext:默认从类路径加载配置文件
2. FileSystemXmlApplicationContext:默认从文件系统中装载配置文件
3. ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器启动事件、关闭事
件等。
4. MessageSource:为应用提供 i18n 国际化消息访问的功能;
5. ResourcePatternResolver : 所 有 ApplicationContext 实现类都实现了类似于
PathMatchingResourcePatternResolver 的功能,可以通过带前缀的 Ant 风格的资源文件路径装
载 Spring 的配置文件。
6. LifeCycle:该接口是 Spring 2.0 加入的,该接口提供了 start()和 stop()两个方法,主要用于控制异
步处理过程。在具体使用时,该接口同时被 ApplicationContext 实现及具体 Bean 实现,
ApplicationContext 会将 start/stop 的信息传递给容器中所有实现了该接口的 Bean,以达到管理
和控制 JMX、任务调度等目的。
7. ConfigurableApplicationContext 扩展于 ApplicationContext,它新增加了两个主要的方法:
refresh()和 close(),让 ApplicationContext 具有启动、刷新和关闭应用上下文的能力。在应用上
下文关闭的情况下调用 refresh()即可启动应用上下文,在已经启动的状态下,调用 refresh()则清
除缓存并重新装载配置信息,而调用 close()则可关闭应用上下文。

标签:ApplicationContext,调用,配置文件,Spring,接口,Bean,IOC
From: https://www.cnblogs.com/li-xiaotian/p/16602741.html

相关文章

  • Spring学习1-IOC、IOC容器、Bean、DI
    1.IOC(InversionofControl)控制反转   (1)什么是控制反转呢? 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此......
  • Spring 04: IOC控制反转 + DI依赖注入
    Spring中的IOC一种思想,两种实现方式IOC(InversionofControl):控制反转,是一种概念和思想,指由Spring容器完成对象创建和依赖注入核心业务:(a)对象的创建(b)依赖的......
  • Spring之控制反转IoC与依赖注入DI讲解
    1.最终目录2.代码示例(1)BookDaoImpl.java与BookServiceImpl.javapackagecom.hung.dao.Impl;importcom.hung.dao.BookDao;importcom.hung.service.Impl.BookSe......
  • IOC
    介绍什么是SpringIOC,就是把每一个bean(实体类)与bean(实体类)之间的关系交给第三方容器进行管理。 关键类 BeanFactoryIOC的顶层容器,描述了IOC的规范。BeanFactor......
  • spring5 ioc 管理bean 注解
    1.注解种类@Component(value="student")@Service@Repository@Controller 2.使用注解扫描包<context:component-scanbase-package="com.cj"></context:componen......
  • [Spring框架]IOC容器
    一、IOC容器1.什么是IOC?把对象创建和对象之间的调用过程,交给Spring进行管理使用目的:降低耦合度2.IOC底层?xml解析工厂模式反射IOC是一个容器,本质上就是一个对......
  • Spring 01: Spring配置 + IOC控制反转 + Setter注入
    简介Spring框架是一个容器,是整合其他框架的框架他的核心是IOC(控制反转)和AOP(面向切面编程),由20多个模块构成,在很多领域都提供了优秀的问题解决方案特点轻量级:由2......
  • 1、spingIOC+IDEA+Maven
    1、先配置spring、springmvc通用xml文件的头部信息spring、springmvc通用xml文件的模板内容如下:1<?xmlversion="1.0"encoding="UTF-8"?>2<beansxmlns="http://......
  • spring5 ioc 管理xml
    1.注入空值<propertyname="tag"><null></null></property>2.特殊字符<propertyname="name"><value><![CDATA[<<java入门到精通>>]]><......
  • spring5 ioc bean管理
    1.创建对象 2.注入属性2.1set注入<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http:......