一些基础的注解(便于查看源码时理解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}):自动配置导入选择器