理解Springboot中的注解

一些基础的注解(便于查看源码时理解Springboot的注解)

@Target:注解的作用目标
  @Target(ElementType.TYPE)——接口、类、枚举、注解
  @Target(ElementType.FIELD)——字段、枚举的常量
  @Target(ElementType.METHOD)——方法
  @Target(ElementType.PARAMETER)——方法参数
  @Target(ElementType.CONSTRUCTOR) ——构造函数
  @Target(ElementType.LOCAL_VARIABLE)——局部变量
  @Target(ElementType.ANNOTATION_TYPE)——注解
  @Target(ElementType.PACKAGE)——包

@Retention:注解的保留位置
  RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
  RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
  RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

@Documented:说明该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类中的该注解

@Import:引入其他的@Configuration配置类

@ConditionalOnProperty:控制@Configuration是否生效,通过havingValue与配置文件中的值对比,返回为true则配置类生效,反之失效.

//prefix为配置文件中的前缀,
//name为配置的名字
//havingValue是与配置的值对比值,当两个值相同返回true,配置类生效.
@ConditionalOnProperty(prefix = "filter",name = "loginFilter",havingValue = "true")

@ConfigurationProperties(prefix="user")
1.和@Component一起注解在类上,表明该类是一个bean,且在配置文件中user就代表这个类的bean
2.使用@ConfigurationProperties和@Bean注解在配置类的Bean定义方法上。以数据源配置为例:

@Configuration
public class DataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix="spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
}

这里便是将前缀为“spring.datasource.primary”的属性,赋值给DataSource对应的属性值。
@Configuration注解的配置类中通过@Bean注解在某个方法上将方法返回的对象定义为一个Bean,并使用配置文件中相应的属性初始化该Bean的属性。
3.使用@ConfigurationProperties注解到普通类,然后再通过@EnableConfigurationProperties定义为Bean。这里User对象并没有使用@Component相关注解。

@ConfigurationProperties(prefix = "user1")
public class User {
    private String name;
    // 省略getter/setter方法
}

下面的代码中,通过@EnableConfigurationProperties对User进行实例化时,便会使用到@ConfigurationProperties的功能,对属性进行匹配赋值。

@SpringBootApplication
@EnableConfigurationProperties({User.class})
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

@Component:表明这个类会作为组件类,并告知Spring要为这个类创建bean

@Bean:告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。
总结:@Component和@Bean都是用来注册Bean并装配到Spring容器中,但是Bean比Component的自定义性更强。可以实现一些Component实现不了的自定义加载类。

Springboot中的注解

@SpringBootApplication:说明这是一个Spring Boot应用 , SpringBoot就应该运行这个类的main方法来启动SpringBoot应用

@ComponentScan:自动扫描并加载符合条件的组件或者bean,将这个bean加载到IOC容器中

@SpringBootConfiguration:SpringBoot的配置类
    @Configuration:说明这是一个配置类,配置类就是对应Spring的xml文件
      @Component:启动类本身也是Spring中的一个组件,负责启动应用

@EnableAutoConfiguration:开启自动配置功能
    @AutoConfigurationPackage:自动配置包
      @Import({Registrar.class}):将主启动类 及其同级目录的包下所有组件扫描到Spring容器中
    @Import({AutoConfigurationImportSelector.class}):自动配置导入选择器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容