1. @SpringBootApplication
使用@AliasFor注解定义了4个参数,分别是"exclude","excludeName","basePackages","basePackagesClasses"
exclude指定不扫描的类,比如 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
excludeName直接指定不扫描的类名称
basePackages指明扫描路径
basePackagedClasses指明扫描的类
2. @EnableDiscoveryClient、@EnableEurekaClient
都用于注册发现服务,但是@EnableEurekaClient只适合Eureka,而@EnableDiscoveryClient可以是其它注册中心。从Spring Cloud Edgware开始,@EnableDiscoveryClient或@EnableEurekaClient可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。
3. @EnableTransactionManagement
支持事务管理,只要在service上加@Transaction。
4. @EnableConfigurationProperties
@EnableConfigurationProperties注解的作用是,使使用 @ConfigurationProperties 注解的类生效。
5. @EnableAsync
@EnableAsync可以让Spring启用异步方法执行,就跟在xml中配置<task:*> 效果是一样的。它可以跟@Configuration结合,让整个Spring环境启用基于注解的异步处理
默认情况下,Spring会查找一个关联的线程池:要么是一个org.springframework.core.task.TaskExecutor类型的bean,要么是一个类型是 java.util.concurrent.Executor名字是taskExecutor的bean。如果这两个都没找到,Spring会使用org.springframework.core.task.SimpleAsyncTaskExecutor来执行异步方法,SimpleAsyncTaskExecutor实际上并不是线程池,它是为每一个新任务创建一个新的线程。此外,如果异步方法的返回值是void,那么调用过程中的异常信息是无法返回给调用者的,默认只是记录日志。
ThreadPoolTaskExecutor并没有被Spring容器管理,可以在getAsyncExecutor() 上添加@Bean注解让它变成Spring管理的Bean。如果加入到Spring容器,那么就不需要手动调用executor.initialize() 做初始化了,因为在Bean初始化的时候会自动调用这个方法。
@Configuration public class ThreadPoolConfig { @Bean public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); threadPoolTaskExecutor.setCorePoolSize(300); threadPoolTaskExecutor.setMaxPoolSize(500); threadPoolTaskExecutor.setQueueCapacity(300); threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); threadPoolTaskExecutor.setThreadNamePrefix("order-thread-"); return threadPoolTaskExecutor; } }
这里是自定义线程池的范例,使用了CallerRunsPolicy拒绝策略,注意这种拒绝策略如果线程池满,会将任务交给调度它的线程(比如主线程)去执行,存在将主线程搞崩的风险。
6. @EnableScheduling
观察它的源码,发现它导入了SchedulingConfiguration类,而这个类会创建一个ScheduledAnnotationBeanPostProcessor,该processor中的processScheduled()方法会去处理加上了@Scheduled的方法。
所以它的简单使用方法是,编写一个job类,在上面加上@Component注解,然后在方法上加上@Scheduled
7. @EnableFeignClients
OpenFeign的注解,相信很多人都用过,我们通过这个注解告诉框架扫描所有使用注解@FeignClient定义的feign客户端。
它的源码是这样的:
@Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) @Documented @Import({FeignClientsRegistrar.class}) public @interface EnableFeignClients { String[] value() default {}; String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<?>[] defaultConfiguration() default {}; Class<?>[] clients() default {}; }
我们看到这里导入了一个FeignClientRegistrar类,这个类用来扫描@FeignClient注解修饰的接口并注册到IoC容器。
7. @EnableCaching
@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。
当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。
待续...