本文转载自微信公众号《狼王编程》,作者狼王。转载本文请联系狼王编程公众号。大家好,我是狼王,一个爱玩的程序员。相信大家在日常编程中肯定都用过spring和spring注解。甚至在面试的时候,也经常被问到spring和springboot注解的问题。作用和意义等等,那么本文就带大家一起来看看超详细的SpringBoot注解总结吧!开始吧!我们先来看看本文要讨论的注解。Youcanlookattheannotationsandthinkaboutwhatthisis.啥用的,什么场景会用到,有哪些是你不知道的,带着你的答案和疑问再往下看!SpringBootApplicationEnableAutoConfigurationConfigurationSpringBootConfigurationComponentScanConditionalConditionalOnBeanConditionalOnMissingBeanConditionalOnClass@ConditionalOnMissingClass@ConditionalOnWebApplication@ConditionalOnNotWebApplication@ConditionalOnProperty@ConditionalOnExpression@ConditionalOnJava@ConditionalOnResource@ConditionalOnJndi@ConditionalOnCloudPlatform@ConditionalOnSingleCandidate@ConfigurationProperties@EnableConfigurationProperties@AutoConfigureAfter@AutoConfigureBefore@Import@ImportResource阅读配置总结注解和介绍1.@SpringBootApplication这是SpringBoot最核心的注解。它用在SpringBoot的主类上,用来标识这是一个SpringBootApplication,用来开启SpringBoot的各种能力。其实这个注解是@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan的组合。这三个注解也可以用来代替@SpringBootApplication注解。@SpringBootApplication默认扫描该类的所有同级包和子包2.@EnableAutoConfiguration允许SpringBoot自动配置注解。启用该注解后,SpringBoot可以根据当前classpathBean下的包或类来配置Spring。比如当前classpath下有Mybatis的JAR包,MybatisAutoConfiguration注解可以根据相关参数配置Mybatis的各个SpringBean。3.@Configuration这是Spring3.0添加的注解,用于替换applicationContext.xml配置文件。所有在这个配置文件中可以做的事情,都可以通过这个注解所在的类来注册。不使用xml形式的配置文件,使用配置类进行开发4、@SpringBootConfiguration注解是@Configuration注解的变体,只用于修改SpringBoot配置,或者对后续扩展有好处弹簧靴。5.@ComponentScan这是Spring3.1新增的注解,用于替换配置文件中的component-scan配置,开启组件扫描,即自动扫描包路径下的@Component注解注册bean实例进入上下文。6、@Conditional这是Spring4.0新增的注解,用于标识一个SpringBean或Configuration配置文件,只有满足指定条件时才启用配置。7、@ConditionalOnBean与@Conditional注解结合,只有当容器中有指定的Bean时才启用配置。8、@ConditionalOnMissingBean结合了@Conditional注解,与@ConditionalOnBean注解相反,只有当容器中没有指定的Bean时才启用配置。9、@ConditionalOnClass结合@Conditional注解,只有当容器中有指定的Class时才启用配置。10、@ConditionalOnMissingClass结合了@Conditional注解,与@ConditionalOnMissingClass注解相反,只有在容器中没有指定Class时才启用配置。11、@ConditionalOnWebApplication结合@Conditional注解,当前项目类型为WEB项目开启配置。当前项目有以下3种类型。enumType{/***匹配所有webapplications*/ANY,/***只匹配servletwebapplicaiton*/SERVLET,/***只匹配reactive-basedwebapplication*/REACTIVE}12、@ConditionalOnNotWebApplication结合@Conditional注解,和@ConditionalOnWebApplication注解反之,只有当前项目类型不是WEB项目时才启用配置。13、@ConditionalOnProperty结合@Conditional注解,在指定属性有指定值时启用配置。14、@ConditionalOnExpression与@Conditional注解结合,只有当SpEL表达式为真时才启用配置。15、@ConditionalOnJava结合@Conditional注解,当运行的JavaJVM在指定的版本范围内时启用配置。16、@ConditionalOnResource与@Conditional注解结合,只有在classpath下有指定资源时才启用配置。17、@ConditionalOnJndi结合@Conditional注解,只有当指定的JNDI存在时才启用配置。JDNI(JavaNamingandDirectoryInterface)18、@ConditionalOnCloudPlatform结合@Conditional注解,只有在指定的云平台被激活时才启用配置。19、@ConditionalOnSingleCandidate结合@Conditional注解,仅当指定类容器中只有一个Bean,或者同时有多个但首选时才启用配置。20、@ConfigurationProperties用于加载额外的配置(如.properties文件),可以用在@Configuration注解类或@Bean注解方法上。21、@EnableConfigurationProperties一般与@ConfigurationProperties注解结合使用,开启对@ConfigurationProperties注解配置bean的支持。22、@AutoConfigureAfter用在自动配置类上,表示在配置了其他指定的自动配置类之后,需要配置自动配置类。比如Mybatis的自动配置类需要在数据源自动配置类之后。@AutoConfigureAfter(DataSourceAutoConfiguration.class)publicclassMybatisAutoConfiguration{}23、@AutoConfigureBefore这个与@AutoConfigureAfter注解相反,表示该自动配置类需要在另一个指定的自动配置类之前配置。24.@Import这是Spring3.0新增的一个注解,用于导入一个或多个用@Configuration注解修饰的类,在SpringBoot中应用较多。25.@ImportResource这是Spring3.0新增的注解,用于导入一个或多个Spring配置文件。这对于兼容SpringBoot的老项目非常有用,因为有些配置无法以JavaConfig的形式进行配置,只能使用这个Annotations来导入。阅读配置方法总结1.阅读应用文件,在application.yml或properties文件中添加:user.name=狼王user.age=25user.sex=man@valuemethod@ComponentpublicclassUser{@Value("${user.name}")privateStringname;@Value("${user.age}")privateintage;@Value("${user.sex}")privatebooleansex;publicUser(){}publicUser(Stringname,intage,booleanman){this.name=name;this.age=age;this.man=man;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}publicbooleanisMan(){returnman;}publicvoidsetMan(booleanman){this.man=man;}}2、@ConfigurationProperties注解读取方法@Component@ConfigurationProperties(prefix="user")publicclassUser2{privateStringname;privateintage;privatebooleansex;publicUser2(){}publicUser2(Stringname,intage,booleanman){this.name=name;this.age=age;this.man=man;}}3.读取指定文件,在resource下创建config/myConfig目录。properties:db.username=rootdb.password=123@PropertySource+@Value注解读取方法@Component@PropertySource(value={"config/myConfig.properties"})publicclassUser2{@Value("${db.userName}")privateStringuserName;@Value("${db.userName}")privateStringpassWord;publicUser2(){}publicUser2(StringuserName,StringpassWord){this.userName=userName;this.passWord=passWord;}}也可以通过@PropertySource+@ConfigurationProperties注解读取。好了,今天就到这里了,接下来我会继续分享自己的所思所想,希望我们一起走在成功的路上!
