SpringBoot基础-基本注解

注解

0.@SpringBootApplication

首先标注在主类上的注解,其实是由以下三个注解构成

@SpringBootConfiguration
代表Main程序实际也是一个核心配置类
@ComponentScan
包扫描,默认是主类文件夹内的包及以下
@EnableAutoConfiguration
由以下两个注解构成
  @AutoConfigurationPackage
  @Import({AutoConfigurationImportSelector.class})
@AutoConfigurationPackage
@Import({Registrar.class})
public @interface AutoConfigurationPackage {}
// 利用Registrar给容器中导入一系列组件
// 将指定的一个包(主类MainApplication所在的包)下的所有组件导入进来
@Import({AutoConfigurationImportSelector.class})
1.利用getAutoConfigurationEntry(annotationMetadata);给容器批量导入组件
2.利用List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);获取到所有需要导入到IOC容器中的类名
3.利用工厂加载 Map<String, List<String>> loadSpringFactories(ClassLoader classLoader);得到所有的组件
private static Map<String, List<String>> loadSpringFactories(ClassLoader classLoader) {
	……
	Enumeration urls = classLoader.getResources("META-INF/spring.factories");
	……
}

最终发现,在spring-boot-autoconfigure-2.5.5.jarMETA-INF/spring.factories文件内,写死了所有springboot启动时要给容器中加载的所有配置类
在这里插入图片描述
虽然是默认全部加载所有场景的配置类,但是最后springboot会进行按需加载,原因就是这些配置类中用了大量的@Conditional注解进行条件装配,在我们没有导入场景相关的starter包时,这些配置类就不会生效,也就实现了按需注册了。在这里插入图片描述

总结:
  • SpringBoot先加载所有的自动配置类,xxxxAutoConfiguration
  • 每个自动配置类按照条件进行生效,more都会把固定配置文件指定的值从xxxxProperties中拿。xxxxProperties和配置文件(application.properties)进行了绑定。
  • 生效的配置类就会给容器中装配很多组件
  • 只要容器中有这些组件, 就相当于有这些功能了
  • 定制化配置
    • 用户直接自己@Bean替换底层的组件
    • 用户去看这个组件是与哪个prefix的前缀在application.properties配置文件进行了字段绑定,修改之。

1.@Configuration

在Spring中经常会使用xml配置去注册容器里的类,使用@Configuration可以直接标注在类上,使一个类变为配置类,然后@Bean标注在类中的方法上,方法名就是实例名,方法返回值就是实例的类型。

Tips:@Configuration(proxyBeanMethods = true)是默认使用代理注册配置类对象,这样配置类里的实例就会是单例模式。proxyBeanMethods = false的话则没有规则使得@Bean成为单例。

2.@Import

可以标注在配置类上,@Import({User.class})这样就会调用类的无参构造器注入一个实例到容器内。

3.@Conditional

条件装配,当满足指定条件时,进行注册或者相关功能
在这里插入图片描述
比如@ConditionalOnBean,当容器中有某个Bean时,才进行操作。

4.@ImportResource(“classpath:beans.xml”)

写的位置:随便一个配置类上
作用:导入根路径下beans.xml里的内容注册进容器,相当于兼容了一下旧版本。

5.@ConfigurationProperties

作用:使用Java读取properties文件的内容,并把它封装到JavaBean中,以便使用。
在类名上标注,然后写好前缀去匹配配置文件中的属性
在这里插入图片描述
在这里插入图片描述
最后要把Car注册到IOC容器中(两种方法),才能享受到自动绑定属性
1.Car上加@Component注解(自己写的类)
2.随便一个配置类上使用@EnableConfigurationProperties注解指定Car.class(可用在第三方类上)
在这里插入图片描述
然后随便去哪个组件下自动注入
在这里插入图片描述
再输出,会发现已经把属性绑定好了,Car{brand=‘BYD’, color=‘red’}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值