资讯专栏INFORMATION COLUMN

@Bean 注解

刘福 / 905人阅读

摘要:以及其中的注解注解从定义来看注解是用注解的因此或者都能处理注解的类注解的类中可以声明一个或多个注解的方法并且可以由容器帮我们管理方法可以直接调用同一类中的其他方法来引用它们这也说明这种方式使用的是同一个注在运行时对每个这样的配置类进行子类

@Configuration 以及其中的 @Bean 注解

@Configuration 注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {
    String value() default "";
}

从定义来看, @Configuration 注解是用 @Component 注解的, 因此 或者 @ComponentScan 都能处理 @Configuration 注解的类.

@Configuration 注解的类中可以声明一个或多个 @Bean 注解的方法. 并且可以由 Spring 容器帮我们管理.

 @Configuration
 public class AppConfig {

     @Bean
     public MyBean myBean() {
         // instantiate, configure and return bean ...
     }
 }

userInfo() 方法可以直接调用同一类中的其他 @Bean 方法来引用它们. 这也说明这种方式使用的是同一个 bean.

@Configuration
public class MyBeanConfig {

    @Bean
    public Country country(){
        return new Country();
    }

    @Bean
    public UserInfo userInfo(){
        return new UserInfo(country());
    }

}
注: 在运行时对每个这样的配置类(@Configuration)进行CGLIB子类化. 因此 @Configuration 类及其工厂方法不能标记为 final 或 private.

@Configuration 标记的类必须符合下面的要求:

配置类必须以类的形式提供(不能是工厂方法返回的实例), 允许通过生成子类在运行时增强 (cglib 动态代理).

配置类不能是 final 类 (没法动态代理).

配置类必须是非本地的 (即不能在方法中声明)

任何嵌套配置类都必须声明为static。

@Bean 方法可能不会反过来创建进一步的配置类 (也就是返回的 bean 如果带有 @Configuration, 也不会被特殊处理, 只会作为普通的 bean).

@Bean Lite Mode

@Bean 注解也可以在没有使用 @Configuration 注解的类中声明. 例如, 可以在 @Component 类中声明, 甚至可以在普通的旧类中声明. 在这种情况下, @Bean方法将以所谓的“lite”模式进行处理.

 @Component
 public class Calculator {
     public int sum(int a, int b) {
         return a+b;
     }

     @Bean
     public MyBean myBean() {
         return new MyBean();
     }
 }

@Configuration 中的 bean 是相反的, 当一个 @Bean 方法在lite模式下调用另一个 @Bean 方法时, 调用是标准的Java方法调用; Spring不会通过CGLIB代理拦截调用.

 @Component
public class MyBeanConfig {

    @Bean
    public Country country(){
        return new Country();
    }

    @Bean
    public UserInfo userInfo(){
        return new UserInfo(country());
    }

}

在lite模式下每执行一次 new UserInfo(country()); 都会创建一个新的 Country 对象, 这就是上面所说标准的Java方法调用.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77422.html

相关文章

  • Spring注解专题系列

    摘要:用法先创建个组件,,,分别在类上加上注解。发现有一个属性源码注释这样说的自动检测使用组件。在的方法中,表示不匹配,代表匹配。这就说明使用注册组件有种方式。 Spring注解应用篇--IOC容器Bean组件注册 这是Spring注解专题系类文章,本系类文章适合Spring入门者或者原理入门者,小编会在本系类文章下进行企业级应用实战讲解以及spring源码跟进。 环境准备 编译器IDEA...

    CocoaChina 评论0 收藏0
  • spring入门指南

    摘要:装配提供了三种装配机制在中进行显示配置在中进行显示配置隐式的发现机制和自动装配机制。表示该类是一个组件,将自动创建该组件实例,表示注入组件实例,和功能类似,和功能类似,但和是规范中提供的注解。 基本原理 spring的基础是IOC和DI,其实IOC和DI是对同一件事从不同的方面进行描述的,两者在spring中是同一件事务。 IOC:控制反转,在这里就是指创建bean的主动权发生了转移,...

    shusen 评论0 收藏0
  • 看起来很长但还是有用的Spring学习笔记

    摘要:关于依赖注入注入的注解提供的注解不仅仅是对象,还有在构造器上,还能用在属性的方法上。与之相反,的限定符能够在所有可选的上进行缩小范围的操作,最终能够达到只有一个满足所规定的限制条件。注解是使用限定符的主要方式。 本文首发于泊浮目的专栏:https://segmentfault.com/blog... Spring致力于提供一种方法管理你的业务对象。在大量Java EE的应用中,随处可...

    DTeam 评论0 收藏0
  • Spring5:@Autowired注解、@Resource注解和@Service注解[转载]

    摘要:因此,引入注解,先看一下配置文件怎么写注意第行,使用必须告诉一下我要使用注解了,告诉的方式有很多,是一种最简单的,会自动扫描路径下的注解。 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大;如果按需求分开.xml文件,那么.xml文件又会非常多。总之...

    netScorpion 评论0 收藏0
  • Spring - 高级装配

    摘要:高级装配条件化的自动装配与歧义性的作用域表达式语言环境与可以为不同的环境提供不同的数据库配置加密算法等注解可以在类级别和方法级别,没有指定的始终都会被创建的方式配置不同环境所需要的数据库配置会搭建一个嵌入式的数据库模式定义在测试数据通过加 高级装配 Spring profile 条件化的bean 自动装配与歧义性 bean的作用域 Spring表达式语言 环境与profile p...

    binta 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<