SpringBoot自动配置及容器注入理解

自动配置简介

SpringBoot应用程序通过@SpringBootApplication注解来实现自动配置,虽然127个场景的所有自动配置启动的时候默认全部加载,但我们需要按需开启自动配置项,通过条件装配规则注解@Conditional来进行配置。

@SpringBootApplication是一个复合注解,@SpringBootConfiguration说明这是一个配置类,里面有一个@EnableAutoConfiguration注解表示开启自动配置功能,自动配置了常见的第三方工具,例如mybatis、redis、OAuth2、Rabbitmq等。

spring官网提供了所有的自动配置属性,可参考: https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/htmlsingle/

在这里插入图片描述

@EnableAutoConfiguration注解中,@AutoConfigurationPackage指定了默认的包规则,@Import(AutoConfigurationImportSelector.class),给容器中导入所有需要导入到容器的组件,并配置好这些组件。

在这里插入图片描述

SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先。

SpringBoot容器注入

@Configuration:说明这个类是配置类,在类中的方法中添加@Bean注解(返回一个实例对象),在spring5.2以后,该注解添加了一个属性proxyBeanMethods,默认是true,保证每个@Bean方法被调用多少次返回的组件都是单实例的,当为false时,说明每个@Bean方法被调用多少次返回的组件都是新创建的,一般情况下组件依赖(一个组件中含有另一个组件)必须使用true,其他是false比较合适

@Bean:给容器添加组件,组件的默认id就是方法名,可以通过@Bean(”名字")自定义

@Configuration
public class MyConfig {
    @Bean("yaoqi")//更改组件名
    public yaoqiService yaoqiservice(){
        return new yaoqiService();
    }
}

@Component、@Controller、@Service、@Repository:同样也是添加组件的注解,主要用于区分组件的功能

@Conditional:条件装配,满足某些条件才会添加组件,是一个组合注解

在这里插入图片描述

常见的要求:

  • @ConditionalOnJava:系统的java版本是否符合要求

  • @ConditionalOnBean:容器中存在指定Bean;

  • @ConditionalOnMissingBean:容器中不存在指定Bean;

  • @ConditionalOnExpression:满足SpEL表达式指定

  • @ConditionalOnClass:系统中有指定的类

  • @ConditionalOnMissingClass:系统中没有指定的类

  • @ConditionalOnSingleCandidate:容器中只有一个指定的Bean,或者这个Bean是首选Bean

  • @ConditionalOnProperty:系统中指定的属性是否有指定的值

  • @ConditionalOnResource:类路径下是否存在指定资源文件

  • @ConditionalOnWebApplication:当前是web环境

  • @ConditionalOnNotWebApplication:当前不是web环境

  • @ConditionalOnJndi:JNDI存在指定项

//如果容器中不存在名为yaoqi的组件,那么该配置类中的所有主件都不会被创建
@ConditionalOnBean(name="yaoqi")
public class MyConfig {
    //如果容器中有名为yao注解的主件,才会创建yaoqiService组件
    @ConditionalOnBean(name="yaoqi")
    public yaoqiService yaoqiservice(){
        return new yaoqiService();
    }
}

@Import:该注解作用在配置类上,通过调用无参构造方法给容器中创建组件,默认名字就是全类名

@ImportResource:我们自己编写的Spring配置文件是不能自动引用的,@ImportResource标注在一个配置类上,就能加载Spring的配置文件,

@ImportResource("classpath:spring.xml")
public class MyConfig {}
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幺柒.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值