今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

spring boot 应用常用注解

  

  •  @Configuration

该注解是spring context中的类,指示一个类声明了一个或多个Spring容器管理的bean,可以替代之前的xml形式的bean定义。AnnotationConfigApplicationContext可以通过该注解标记的类获取已经配置的类。

  • @SpringBootApplication

我们只需要在主类上加上该注解,就能启动spring boot 应用。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

从源码可以看到它将@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解合在一起了。

  • @SpringBootConfiguration

标记一个类作为Spring Boot应用程序。 可以用作Spring标准@Configuration注解的替代方法,以便可以自动找到配置(例如在测试中)。 应用程序应该只包含一个@SpringBootConfiguration。

  • @EnableAutoConfiguration

spring boot 开启自动配置,自动配置在spring-boot-autoconfigure 包中,spring boot可以根据你项目中的依赖包自动配置一些需要的bean,  里面的exclude和excludeName方法可以根据类和类名排除不需要的自动配置的bean, 详细的自动配置原理在后面会再次说明。

  • @ConfigurationProperties

ConfigurationProperties 与@Value 不同,它可以将配置文件中的信息绑定到类中的属性上,不支持SpEL,可以结合JSR303完成数据校验. 注意只是使用@ConfigurationProperties 不能被注册到IOC容器,需要配合@Configuration或@EnableConfigurationProperties或者@ConfigurationPropertiesScan

@Configuration
@Data
@ConfigurationProperties("spring.datasource")
public class DataSourceConfig {
    private String url;
    private String username;
    private String password;
}

也可以将配置文件中的值直接转化为list和map

//application.properties   

test.list=one,two,three,four

user.userinfo.name=张三 user.userinfo.age=18

list

@Configuration
@ConfigurationProperties("test")
public class DevConfigProps {
   private List<String> list;

map

@Configuration
@Data
@ConfigurationProperties("user")
public class UserMapConfig {
    public Map<String,Object> userinfo;
}
  • @Conditional

顾名思义bean注册的条件,可以直接或间接用在@Component,@Configuration类标注的类上,或者@Bean方法上。该注解不支持继承。

  • @ConditionalOnClass

在类路径下找到相应的类,条件成立,可以将当前类注册到spring容器中。

  • ConditionalOnMissingBean

仅在该注解规定的类不存在于 spring容器中时,使用该注解标记的类将会注册到spring容器中,当放置在方法上时,默认时类型时方法的返回类型

@Configuration
 public class MyAutoConfiguration {

     @ConditionalOnMissingBean
     @Bean
     public MyService myService() {
         ...
     }

 }

上面示例中,如果BeanFactory中不包含MyService类型的bean,则条件将匹配。将MyServicebean注入到容器中。其他@ConditionalOnxxx套路和@ConditionalOnClass,@ConditionalOnMissingBean一样

分享到:

专栏

类型标签

网站访问总量