springboot的注解详解

配置类相关:

@PropertySource(value = "classpath:test.properties")   //我们都把配置文件写到application.yml中。有时我们不愿意把配置都写到application配置文件中,这时需要我们自定义配置文件,比如test.properties:

@ConfigurationProperties(prefix = "com.forezp")         //在配置文件中的前缀,属性自动注入

@EnableConfigurationProperties      //@ConfigurationProperties注解主要用来把properties配置文件转化为bean来使用的,而@EnableConfigurationProperties注解的作用是@ConfigurationProperties注解生效。如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的。一般不用加,因为在我们的的appliacation的启动类@SpringBootApplication注解中已经包含了@ComponentScan和@EnableConfigurationProperties注解。

@EntityScan("com.ihrm")  实体类扫描包

@SpringBootApplication(scanBasePackages = "com.ihrm")  启动类扫描

@ComponentScan(basePackages={"com.xuecheng.manage_cms"})//扫描本项目下的所有类

自动配置 (Spring-boot-autoconfigure包下的)

https://www.jianshu.com/p/68a75c093023

@ConditionalOnBean 配置了某个特定bean  (仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)

@ConditionalOnBean(Xxxx.class)
仅仅在当前上下文中存在Xxxx对象时,才会实例化一个Bean 
也就是 只有当Xxxx.class 在spring的applicationContext中存在时  这个当前的bean才能够创建

------------------第二种用法:用name来指定
@ConditionalOnBean(name="redisTemplate")

@ConditionalOnMissingBean 没有配置特定bean  (仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)

@ConditionalOnMissingBean(Xxxx.class)
当前上下文中不存在Xxxx对象时,才会实例化一个Bean 
也就是 只有当Xxxx.class 在spring的applicationContext中不存在时  这个当前的bean才能够创建

@ConditionalOnClass (xxx.class)   (当xxx.class存在时,才会实例化一个Bean)
@ConditionalOnMissingClass (当xxx.class不存在时,才会实例化一个Bean)
@ConditionalOnProperty 给定配置属性中包含某个值

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {

    String[] value() default {}; //数组,获取对应property名称的值,与name不可同时使用  
  
    String prefix() default "";//property名称的前缀,可有可无  
  
    String[] name() default {};//数组,property完整名称或部分名称(可与prefix组合使用,组成完整的property名称),与value不可同时使用  
  
    String havingValue() default "";//可与name组合使用,比较获取到的属性值与havingValue给定的值是否相同,相同才加载配置  
  
    boolean matchIfMissing() default false;//缺少该property时是否可以加载。如果为true,没有该property也会正常加载;反之报错  
  
    boolean relaxedNames() default true;//是否可以松散匹配,至今不知道怎么使用的  
} 
}
通过其两个属性name以及havingValue来实现的,其中name用来从application.properties中读取某个属性值。
如果该值为空,则返回false;
如果值不为空,则将该值与havingValue指定的值进行比较,如果一样则返回true;否则返回false。
如果返回值为false,则该configuration不生效;为true则生效。
@ConditionalOnProperty(prefix = "guns", name = "spring-session-open", havingValue = "true")
就是说 配置文件中 有没有 guns.spring-session-open的属性,有的话,取到这个属性的值,如何取到的值和havingValue的值一样就注册,不一样就不注册


@ConditionalOnResource classpath有指定资源

当指定的资源文件出现在classpath中生效

@Bean
@ConditionalOnResource(resources="classpath:shiro.ini")
protected Realm iniClasspathRealm()


@ConditionalOnWebApplication 是一个web应用程序
@ConditionalOnNotWebApplication 不是一个web应用程序

原文地址:https://www.cnblogs.com/coder-lzh/p/8983857.html