Spring Bean 的生命周期和作用域?

简介: Spring Bean 的生命周期和作用域?

Spring Bean 的生命周期和作用域?



Spring Bean 的生命周期


Spring Bean 的生命周期可以分成,创建,使用,销毁几个过程。


Spring Bean 创建过程如下:


  1. 实例化 Bean 对象
  2. 设置 Bean 属性
  3. 通过各种 Aware 接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依赖,包括 BeanNameAware 、BeanFactoryAware 和 ApplicationContextAware 分别注入 BeanID ,BeanFactory或者ApplicationContext
  4. 调用 BeanPostProcessor 的前置初始化方法 postProcessBeforeInitialization
  5. 如果实现了InitializingBean 接口,会调用 afterPropertiesSet 方法。
  6. 调用 Bean 自身定义的 init 方法。
  7. 调用 BeanPostprocessor 的后置初始方法 postProcessAfterInitialization。
  8. 创建过程完毕。

640.png

Spring Bean 的销毁


Spring Bean 的销毁过程会依次调用 DisposableBean 的 destroy 方法和 Bean 自身定制的 destroy() 方法。


Spring Bean 作用域


Spring Bean 有五个作用域,最基础的是如下两种:

  • Singleton ,这是 Spring 的默认作用域,也就是为每个 IOC 容器创建唯一一个 Bean 实例,也称为单例。
  • Prototype ,针对每个 getBean 请求,容器会单独创建一个 Bean 实例。

从 Bean 的特点来看,Prototype 适合有状态的 Bean ,而Singleton 则更适合无状态的情况。

Web 容器还支持另外三种作用域

  • Request, 每个 HTTP 请求创建单独的 Bean 实例。
  • Session ,很显然 Bean 实例的作用域是 Session范围。
  • GlobalSession, 用于 Portlet 有单独的 Session,GlobalSession 提供了一个全局性的 HTTP Session。


Spring 基础机制


  • IOC, 控制反转(Invension of Control) ,或者叫做依赖注入(Depency Injection),通过这种机制,可以有效的改善模块之间的紧耦合问题。从 Bean 创建过程可以看到,它的依赖关系都是由容器负责注入。

spring 注入的四种方式:

  1. 构造器注入
  2. setter 方法注入
  3. 基于注解注入
  • AOP,我们是通过切面编程机制,Spring 框架中的事务、日志、安全、等功能都依赖 AOP 技术。

Spring AOP 关键概念

  1. Aspect , 通常叫做方面,它是跨不同 Java 类层面的横切行逻辑。在实现形式上,可以是 XML 文件中配置的普通类,也可以是 @Aspect 注解取声明。在运行时,Spring 框架会创建类似 Advisor 来指代它,其内部包括切入的时机(Pointcut)和动作 (Advide)
  2. Join Point 它是 Aspect 可以切入的特定点,在 Spring 里面只有方法可以作为 Join Point
  3. Advice ,定义了切面中能够采取的动作。


640.png


BeforeAdvice 和 AfterAdvice 包括他的子类接口是简单的实现,而 Interceptor 则是所谓的拦截器,用于拦截住方法调用事件,进而采取相应动作,所以 Interceptor 是覆盖整个方法过程调用的 Advice。通常将拦截器类型的 Advice叫做 Around ,在代码中使用 @Arround 来标记。aop:around。


640.png



PointCut 它负责具体定义 Aspect 被应用在哪些 Joint Point 可以通过指定具体的类名和方法名来实现。

640.png




相关文章
|
1月前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
14天前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
14天前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
91 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
|
1天前
|
XML Java 数据格式
spring复习02,xml配置管理bean
详细讲解了Spring框架中基于XML配置文件管理bean的各种方式,包括获取bean、依赖注入、特殊值处理、属性赋值、集合类型处理、p命名空间、bean作用域及生命周期和自动装配。
spring复习02,xml配置管理bean
|
1天前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
1月前
|
XML Java 数据格式
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
这篇文章是Spring5框架的入门教程,详细讲解了IOC容器中Bean的自动装配机制,包括手动装配、`byName`和`byType`两种自动装配方式,并通过XML配置文件和Java代码示例展示了如何在Spring中实现自动装配。
Spring5入门到实战------6、IOC容器-Bean管理XML方式(自动装配)
|
1月前
|
XML Java 数据格式
Spring5入门到实战------8、IOC容器-Bean管理注解方式
这篇文章详细介绍了Spring5框架中使用注解进行Bean管理的方法,包括创建Bean的注解、自动装配和属性注入的注解,以及如何用配置类替代XML配置文件实现完全注解开发。
Spring5入门到实战------8、IOC容器-Bean管理注解方式
|
1月前
|
Java Spring
|
1月前
|
前端开发 Java 开发者
|
1月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决