写点什么

springboot- 注解汇总,Java 自学宝典下载

用户头像
极客good
关注
发布于: 刚刚

[](


)@Configuration




@Configuration,将类作为配置,最主要的就是可以在类中使用 @Bean 注解,标注在方法上,可以将方法的返回值对象放入的容器中,对象的名称是方法名称。


[](


)@Component




此注解主要作用是将标注的类放入的容器,@controller,@service 本质一样。


[](


)@ComponentScans




见名知意,就是扫描 @Component 注解的,给定包名,可以将包内的使用 @Component 注解标注的类放入到容器中。注意,这个注解不能单独使用,需要搭配 @Configuration 注解。


[](


)@PropertySource




这个注解的作用是加载一个属性文件,通常用法是加载属性文件,将属性文件值赋值给 bean 的属性。


使用方法可以参考[使用方法](


),注意,这个注解不能单独使用,需要搭配 @Configuration 注解。


[](


)@ConfigurationProperties




这个注解通常是用来获取主配置文件的(application.yml 或者 application.properties)中的属性值,将其赋值给 bean 属性。

[](

)使用方法


以 DataSourceProperties 为例


@ConfigurationProperties(prefix = "spring.datasource")


public class DataSourceProperties implements BeanClassLoaderAware, InitializingBean {


private ClassLoader classLoader;


private String name;


private boolean generateUniqueName;


private Class<? extends DataSource> type;


private String driverClassName;


private String url;


private String username;


private String password;


private String jndiName;


。。。


}


配置文件中的属性:


spring:


datasource:


driver-class-name:


url:


password:


username:


前缀+属性名称,如果可以对应上配置文件中的 key,就把 key 对应的 value,赋值给 bean 的属性。这个注解可以单独使用,但你想把这个类放入到容器中,就要搭配 @Configuration。注意;这个的搭配和前面两个注解的搭配不一样。@PropertySource,@ComponentScans,如果不和 @Configuration 注解一起使用,那么其功能就不能实现。而 @ConfigurationProperties 注解,搭配 @Configuration 的目的仅仅是将其放入到容器中。如果单独使用功能是可以实现的。 为了方便,springboot 还提供了一个注解,EnableConfigurationProperties,这个注解可以将配置的属性 bean 放入的容器中。


[](


)@EnableConfigurationProperties




这个注解可以把属性 bean 放入到容器中,将处理 ConfigurationProperties 注解的逻辑类放入到容器中。

[](

)使用方法


@EnableConfigurationProperties(JdbcProperties.class)


public class JdbcTemplateAutoConfiguration {

[](

)原理


直接看 EnableConfigurationPropertiesImportSelector


@Target(ElementType.TYPE)


@Retention(RetentionPolicy.RUNTIME)


@Documented


@Import(EnableConfigurationPropertiesImportSelector.class)


public @interface EnableConfigurationProperties {


org.springframework.boot.context.properties.EnableConfigurationPropertiesImportSelector


实现了 ImportSelector 接口,直接看 selectImports 方法


private static final String[] IMPORTS = {


ConfigurationPropertiesBeanRegistrar.class.getName(),


ConfigurationPropertiesBindingPostProcessorRegistrar.class.getName() };


@Override


public String[] selectImports(AnnotationMetadata metadata) {


return IMPORTS;


}


返回了两个类 ConfigurationPropertiesBeanRegistrar 是将配置的属性 bean 放入到容器。ConfigurationPropertiesBindingPostProcessorRegistrar 是处理 ConfigurationProperties 注解的,绑定逻辑。这两个类的逻辑自己看就可以了,了解大概流程。


[](


)@NestedConfigurationProperty




这个注解还是和属性相关,是嵌套类型的。使用方法[使用方法](


),解析的逻辑应该还是在 ConfigurationPropertiesBindingPostProcessorRegistrar 类中。


[](


)@ImportResource




【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码




这个类是加载配置文件的,没有 springboot 之前,使用 spring 的时候要有 spring.xml 的文件,在里面陪各种信息。这个注解就是加载 xml 配置文件的。


下面重点分析条件注解


[](


)AutoConfigureBefore、AutoConfigureAfter、AutoConfigureOrder




在自动配置的时候,会找到这三个注解,注意,这三个注解是 springboot 自动配置专用的注解,我们开发的时候是用不上的。主要功能就是区分解析的的顺序,


org.springframework.context.annotation.ConfigurationClassParser.DeferredImportSelectorGroupingHandler#processGroupImports


public void processGroupImports() {


for (DeferredImportSelectorGrouping grouping : this.groupings.values()) {


Predicate<String> exclusionFilter = grouping.getCandidateFilter();


// 得到所有的配置类,之后遍历


grouping.getImports().forEach(entry -> {


ConfigurationClass configurationClass = this.configurationClasses.get(entry.getMetadata());


try {


// 分别调用 processImports,走导入类的逻辑。


processImports(configurationClass, asSourceClass(configurationClass, exclusionFilter),


Collections.singleton(asSourceClass(entry.getImportClassName(), exclusionFilter)),


exclusionFilter, false);


}


catch (BeanDefinitionStoreException ex) {


throw ex;


}


catch (Throwable ex) {


throw new BeanDefinitionStoreException(


"Failed to process import candidates for configuration class [" +


configurationClass.getMetadata().getClassName() + "]", ex);


}


});

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
springboot-注解汇总,Java自学宝典下载