springboot @Configuration 简单理解

Posted 霜序0.2℃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot @Configuration 简单理解相关的知识,希望对你有一定的参考价值。

springboot @Configuration 简单理解

https://www.bilibili.com/video/BV19K4y1L7MT?p=8&spm_id_from=pageDriver

spring中可以用xml来配置bean,而在springboot中,可以用加上了@Configuration注解的java类来配置bean

用法:

@Configuration
public class MyConfig {
    @Bean
    public Cat cat1() {
        Cat cat = new Cat();
        return cat;
    }
}

和spring中xml效果是一样的

查看该注解的源码:

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

    boolean proxyBeanMethods() default true;
}

其中有一个参数proxyBeanMethods,中文是代理Bean的方法

在spring中,如果没有指定,默认从容器中进行创建是单例模式,即每次创建Cat都是同一个对象,除非指定使用原型模式

默认参数是true,即使用单例模式,和spring中一样

配置类(被注解Configuration标记的类)是被CGLIB增强的代理对象

引申出Configuration的两种配置:Full,Lite,Full就是proxyBeanMethods参数为true,Lite就是false

spring懒加载

因为spring在容器初始化的时候会进行bean的创建,当bean的数量极多的时候一一创建耗时也耗空间,而且创建出来的bean都不知道什么时候才能用到,所以spring针对这个情况提供了懒加载机制,即容器初始化时不创建bean,用到bean的时候再创建

以上的情况是单例的bean,多例的bean本来就是在使用时才创建

参考:Spring懒加载机制原理和配置讲解

SpringAOP底层原理

两种情况的动态代理

  • 有接口
  • 没有接口

有接口用JDK动态代理:

即,给被代理的类重新创建实现了接口的代理类,在代理类中调用被代理类的方法,并作修改


没有接口用CGLIB动态代理(CGLIB是一个强大的高性能的代码生成包):

即,给代理类创建一个子类,并在代理类中修改代码

以上是关于springboot @Configuration 简单理解的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot的@Configuration注解

Springboot@Configuration和@Bean详解

springboot之additional-spring-configuration-metadata.json自定义提示

java springboot activemq的@configuration类

springboot整合redis

springboot中读取配置文件@Value和@Configuration