spring中@Configuration和@Bean注解的用法

 更新时间:2023年05月12日 08:40:59   作者:wangjun5159  
这篇文章主要介绍了spring中@Configuration和@Bean注解的用法,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,需要的朋友可以参考下

概要

@Configuration里边定义@Bean,@Configuration相当于一个xml配置文件,@Bean就是xml中的<bean/>

定义

bean依赖可以调用方法,比如这里的beanTwo()。你可能会好奇,如果beanTwo()被调用两次会不会创建两个beanTwo实例,因为spring bean的默认scope是单例;答案是不会创建多个实例的,@Configuration类实现原理是cglib,代理类继承了配置类,然后重写方法,从而实现拦截,这也是为什么配置类不能被final修饰。

@Configuration
public class AppConfig {
    @Bean
    public BeanOne beanOne() {
       //bean依赖,直接调用本类方法beanTwo
        return new BeanOne(beanTwo());
    }
    @Bean
    public BeanTwo beanTwo() {
        return new BeanTwo();
    }
}

如果跨@Configuration怎么办?将依赖bean当做方法参数传递,无论是否同一个类都可以使用这种方式,实践中这种用法更实用

@Configuration
public class AppConfig1 {
    //bean依赖,方法参数当作依赖
    @Bean
    public BeanOne beanOne(BeanTwo  beanTwo) {
        return new BeanOne(beanTwo);
    }
}
@Configuration
public class AppConfig2 {
    @Bean
    public BeanTwo beanTwo() {
        return new BeanTwo();
    }
}

注意

如果@Bean方法返回的是BeanPostProcessor,方法要用static修饰,否则可能造成@Configuration中的@AutoWired、@Inject没被注入,因为很有可能AutoWiredBeanPostProcessor在@Configuration实例化之后执行。这是为什么呢? 这是因为static方法的BeanPostProcessor实例化时,不需要实例化@Configuration类,相当于执行ConfigurationClass.staticMethod(); 而非static方法,依赖@Configuration类实例,相当于new ConfigurationClass().notStaticMethod();

到此这篇关于spring中@Configuration和@Bean注解的用法的文章就介绍到这了,更多相关spring的@Configuration和@Bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot 从静态json文件中读取数据所需字段

    Spring Boot 从静态json文件中读取数据所需字段

    本文重点给大家介绍Spring Boot 从静态json文件中读取数据所需字段,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • Java面试题冲刺第四天--数据库

    Java面试题冲刺第四天--数据库

    这篇文章主要为大家分享了最有价值的三道数据库面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • JavaEE多线程中阻塞队列的项目实践

    JavaEE多线程中阻塞队列的项目实践

    本文主要介绍了JavaEE多线程中阻塞队列的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • 详解Mybatis中的select方法

    详解Mybatis中的select方法

    这篇文章主要介绍了Mybatis的select方法,通过代码给大家详细介绍了selectByExample方法,selectById方法,需要的朋友可以参考下
    2018-07-07
  • 使用JAVA实现高并发无锁数据库操作步骤分享

    使用JAVA实现高并发无锁数据库操作步骤分享

    一个在线2k的游戏,每秒钟并发都吓死人。传统的hibernate直接插库基本上是不可行的。我就一步步推导出一个无锁的数据库操作,详情看下文
    2013-11-11
  • Java生成Jar包方法步骤

    Java生成Jar包方法步骤

    在Java开发中,打包成JAR文件是一种常见的方式,本文主要介绍了Java生成Jar包方法步骤,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Java中将String类型依照某个字符分割成数组的方法

    Java中将String类型依照某个字符分割成数组的方法

    下面小编就为大家分享一篇Java中将String类型依照某个字符分割成数组的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • java学习:日期的运算代码

    java学习:日期的运算代码

    java.util.Date下的很多(构造)方法,已经被标识为"过时"方法,官方推荐使用Calendar类来处理日期的运算,下面是示例:
    2013-02-02
  • Java Map.get()返回指定键所映射的值

    Java Map.get()返回指定键所映射的值

    这篇文章主要介绍了Java Map.get()返回指定键所映射的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java简单实现猜数字游戏附C语言版本

    Java简单实现猜数字游戏附C语言版本

    猜数字是兴起于英国的益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。游戏规则为一方出数字,一方猜,今天我们来用Java和C语言分别把这个小游戏写出来练练手
    2021-11-11

最新评论