[day15 SpringBoot自动装配]

1. SpringBoot中配置文件的优先级?

properties>yml>yaml


2. SpringBoot中配置端口有哪些方式,优先级是怎样的?

命令行参数>Java系统属性>用配置文件

  • 命令行参数(--xxxx=xxxx)
  • Java系统属性(-Dxxxx=xxxx)


3. 能够说出bean的两种常见的作用域及如何设置作用域

 

singleton:容器内同 id 的 bean 只有一个实例(单例)(默认)

prototype:每次使用该  bean 时会创建新的实例(非单例)


4. 怎么使用@Bean注解来管理第三方bean

如果要管理的对象是来自于第三方的(不是自定义的),是无法直接使用 @Component 及衍生注解来声明 bean 对象的,就需要用到 @Bean注解。

@SpringBootApplication
public class SpringbootThirdbeanApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootThirdbeanApplication.class, args);
    }
    
    @Bean
    public BASE64Decoder base64Decoder(){
        return new BASE64Decoder();
    }
}

如果要管理的第三方 bean 比较多,建议对这些bean进行集中分类配置,可以通过 @Configuration 注解声明一个配置类。

@Configuration
public class CommonConfig {
    @Bean
    public BASE64Encoder base64Encoder(){
        return new BASE64Encoder();
    }
	
    @Bean
    public BASE64Decoder base64Decoder(){
        return new BASE64Decoder();
    }
}

注意事项:通过 @Bean 注解的name属性 或 value 属性可以声明 bean 的名称,如果不指定,默认bean的名称就是方法名。

@Component 及衍生注解与 @Bean注解的使用场景:

  • 项目中自定义的,直接使用@Component及其衍生注解来声明bean即可。
  • 项目中引入的第三方的,使用@Bean注解声明bean即可。


5. @Conditional注解和@Import注解的作用是什么?

5.1 @Conditional

SpringBoot 提供了很多@Conditional10nXxx注解,来判断当达成某一条件后,才加载对应的Bean。

作用:按照一定的条件进行判断,需要声明的Bean,在满足给定条件后才会注册到Spring IOC容器中

@Conditional本身还是一个父注解,派生出大量的子注解:

  • @ConditionalOnClass:判断环境中是否有对应字节码文件,才注册bean到IOC容器。
  • @ConditionalOnMissingBean:判断环境中没有对应的bean ,才注册bean到IOC容器。
  • @ConditionalOnProperty:判断配置文件中是否有对应属性和值,才注册bean到IOC容器。

5.2 @import

@Import注解用于导入一些Bean 和 配置类到IOC容器中。

问题:SpringBoot是否能够直接加载第三方Bean?

        不能。因为第三方Bean很大可能和当前项目包结构不匹配。故而可以采用@Import注解导入

@Import注解主要可以导入形式有以下几种:

  1. Bean
  2. 配置类
  3. ImportSelector接口子类

SpringBoot自动配置采用的是第三种。


6. 简要的说出springboot自动配置的原理?

当SpringBoot 程序启动时,引导类上 @SpringBootApplication 注解生效,该注解由三个注解组成

1. @SpringBootConfiguration:引导类也是一个配置类

2. @ComponentScan:包扫描

3. @EnableAutoConfiguration:自动配置。

      底层为:@Import(AutoConfigurationImportSelector.class),通过@Import导入配置类

SpringBoot程序在启动时会自动加载META-INF/spring.factories 文件 和

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件

并导入其中定义的所有配置类。由于这些配置类上都加了Condition条件注解,所以不会将所有Bean 加载到IOC容器中,只有满足条件的Bean才会加载。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值