Spring中自定义Bean特性

这篇具有很好参考价值的文章主要介绍了Spring中自定义Bean特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自定义扩展点

Spring框架提供了许多接口,可以使用它们来定制bean的性质。分组如下:

  • 生命周期回调
  • ApplicationContextAwareBeanNameAware
  • 其他 Aware 接口

生命周期回调

为了与容器对bean生命周期的管理进行交互,可以实现Spring InitializingBean和DisposableBean接口。容器对前者调用afterPropertiesSet(),对后者调用destroy(),让bean在初始化和销毁bean时执行某些操作。

在现代Spring应用程序中,JSR-250 @PostConstruct和@PreDestroy注解通常被认为是接收生命周期回调的最佳实践。使用这些注解意味着你的bean没有耦合到特定于spring的接口。详情请参见使用@PostConstruct和@PreDestroy。

如果不想使用JSR-250注解,但仍然希望消除耦合,请考虑init-method和destroy-method bean定义元数据。

在内部,Spring框架使用BeanPostProcessor实现来处理它可以找到的任何回调接口,并调用适当的方法。如果您需要定制特性或Spring默认不提供的其他生命周期行为,您可以自己实现BeanPostProcessor。有关更多信息,请参见容器扩展点。

除了初始化和销毁回调,spring管理的对象还可能实现Lifecycle接口,以便这些对象可以参与启动和关闭过程,就像容器自己的生命周期驱动的那样。

本节描述生命周期回调接口。

初始化回调

initializingbean接口允许bean在容器设置了bean上所有必要的属性之后执行初始化工作。InitializingBean接口指定了一个方法:

void afterPropertiesSet() throws Exception;

建议你不要使用InitializingBean接口,因为它不必要地将代码与Spring耦合在一起。或者,建议使用@PostConstruct注释或指定POJO初始化方法。在基于xml的配置元数据的情况下,可以使用init-method属性指定具有空无参数签名的方法的名称。通过Java配置,您可以使用@Bean的initMethod属性

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean {

    public void init() {
        // do some initialization work
    }
}

前面的示例与下面的示例效果几乎完全相同:

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements InitializingBean {

    @Override
    public void afterPropertiesSet() {
        // do some initialization work
    }
}

然而,前面两个示例中的第一个没有将代码与Spring耦合

销毁回调

实现org.springframework.beans.factory.DisposableBean接口可以让bean在容器被销毁时获得一个回调函数。disablebean接口指定了一个方法:

void destroy() throws Exception;

我们建议你不要使用disablebean回调接口,因为它不必要地将代码与Spring耦合在一起。或者,我们建议使用@PreDestroy注释或指定bean定义支持的泛型方法。对于基于xml的配置元数据,你可以在上使用destroy-method属性。通过Java配置,你可以使用@Bean的destroyMethod属性

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
public class ExampleBean {

    public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

上面的定义几乎与下面的定义具有完全相同的效果:

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>
public class AnotherExampleBean implements DisposableBean {

    @Override
    public void destroy() {
        // do some destruction work (like releasing pooled connections)
    }
}

然而,前面两个定义中的第一个没有将代码与Spring耦合起来。

从Spring 2.5开始,您有三个控制bean生命周期行为的选项:

  • InitializingBean和DisposableBean回调接口
  • 自定义init()和destroy()方法
  • @PostConstruct和@PreDestroy注解。

(执行顺序)使用不同的初始化方法为同一个bean配置的多个生命周期机制如下所示:

  • 用@PostConstruct注释的方法
  • 由InitializingBean回调接口定义的afterPropertiesSet()
  • 自定义配置的init()方法

Destroy方法的调用顺序相同:文章来源地址https://www.toymoban.com/news/detail-565222.html

  • 用@PreDestroy标注的方法
  • 由disablebean回调接口定义的destroy()
  • 自定义配置的destroy()方法

到了这里,关于Spring中自定义Bean特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 系列三、Spring Security中自定义用户名/密码

    1.1.1、配置文件中配置 1.1.2、定义基于内存的用户 1.1.3、基于UserDetailService接口定义用户 概述:         Spring Security支持多种数据源,例如内存、数据库、LDAP等,这些不同来源的数据被共同封装成了UserDetailService接口,换句话说任何实现了UserDetailService接口的对象都可以作为

    2024年01月19日
    浏览(13)
  • Spring bean定义&Spring Bean 的作用域

    目录 Spring bean定义   Spring配置元数据 Spring Bean 的作用域   singleton作用域:   原型作用域: 示例:   形成应用程序的骨干是由Spring IoC容器所管理的对象称为bean。bean被实例化,组装,并通过Spring IoC容器所管理的对象。这些bean由容器提供,例如,在XML的bean/定义,已经看到了

    2024年02月08日
    浏览(12)
  • Spring 非自定义Bean注解

    1.概述 在xml中配置的Bean都是自己定义的, 例如:UserDaolmpl,UserServicelmpl。但是,在实际开发中有些功能类并不是我们自己定义的, 而是使用的第三方jar包中的,那么,这些Bean要想让Spring进行管理,也需要对其进行配置配置非自定义的Bean需要考虑如下两个问题: 被配置的B

    2024年02月13日
    浏览(14)
  • 【Spring类路径Bean定义信息扫描】

    补充一下: AbstractBeanDefinition、AnnotatedBeanDefinition都是spring框架中定义和处理BeanDefinition的类,他们在SpringIOC容器的核心机制中有重要的地位。 1. AbstractBeanDefinition: 是个抽象类,实现了 BeanDefinition 接口,为BeanDefinition提供了一些通用的方法和属性。 提供了BeanDefinition的基本结构

    2024年01月16日
    浏览(12)
  • Spring Bean 作用域的定义

    Spring Bean 作用域的定义

            在 Spring 配置中,我们可以通过 scope 属性来定义 Spring Bean 的作用域,可以接受 5 个内建的值,分别代表 5 种作用域类型,下面给大家详细总结一下: 1、singleton,用来定义一个 Bean 为单例,也就是说在 Spring loC 容器中仅有唯一 的一个实例对象,Spring 中的 Bean 默认

    2024年02月12日
    浏览(11)
  • 解读spring中@Value 如何将配置转自定义的bean

    解读spring中@Value 如何将配置转自定义的bean

    着急寻求解决方式的猿友先看这块 定义配置转化类 将转化类放入转化工厂 属性注入 spring在bean生命周期的属性赋值中,会根据属性的类型,匹配相应的转化类,执行转化,进而赋值。 不难看出,这些转化类仅执行转化逻辑,不存在线程安全问题,可以将其放入spring的IOC中,

    2024年02月13日
    浏览(7)
  • Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

    Spring5学习随笔-生命周期、自定义类型转换器、后置处理Bean

    学习视频:【孙哥说Spring5:从设计模式到基本应用到应用级底层分析,一次深入浅出的Spring全探索。学不会Spring?只因你未遇见孙哥】 指的是一个对象创建、存活、消亡的一个完整过程 由Spring负责对象的创建、存活、销毁,了解生命周期,有利于我们使用好Spring为我们创建

    2024年02月05日
    浏览(13)
  • Spring | Spring中的Bean--上

    Spring | Spring中的Bean--上

    Spring 可以被看作是个一个 大型工厂 , 这个工厂的 作用 就是 生产和管理Sping容器中的Bean 。如果想要在项目中使用这个工厂,就需要开发者对Spring的 配置文件 进行 配置 。 Spring容器 支持 XML 和 Properties 两种格式的 配置文件 ,在实际开发中, 最常使用 的就是 XML格式 的配置

    2024年01月22日
    浏览(23)
  • Spring | Spring中的Bean--下

    Spring | Spring中的Bean--下

    Spring容器 可以管理 singleton作用域 的 Bean 的 生命周期 ,在此作用域下, Spring能够精确地知道 该Bean 何时被创建 , 何时初始化完成 以及 何时被销毁 。 对于 prototype作用域 的 Bean ,Spring 只负责创建 ,当容器创建了Bean实例后,Bean的实例就交给客户端代码来管理, Spring容器将

    2024年01月18日
    浏览(12)
  • Spring | Spring中的Bean (上)

    Spring | Spring中的Bean (上)

    Spring 可以被看作是个一个 大型工厂 , 这个工厂的 作用 就是 生产和管理Sping容器中的Bean 。如果想要在项目中使用这个工厂,就需要开发者对Spring的 配置文件 进行 配置 。 Spring容器 支持 XML 和 Properties 两种格式的 配置文件 ,在实际开发中, 最常使用 的就是 XML格式 的配置

    2024年01月17日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包