SpringBoot基础-基本注解

SpringBoot基础-基本注解,第1张

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 configurations = this.getCandidateConfigurations(annotationmetadata, attributes);获取到所有需要导入到IOC容器中的类名
3.利用工厂加载 Map> loadSpringFactories(ClassLoader classLoader);得到所有的组件
private static Map> loadSpringFactories(ClassLoader classLoader) {
	……
	Enumeration urls = classLoader.getResources("meta-INF/spring.factories");
	……
}

最终发现,在spring-boot-autoconfigure-2.5.5.jar的meta-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’}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5685334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存