spring-context
注解介绍
配置注解
@ComponentScan 自动扫描指定包下所有使用 @Component 的类并注册
@Configuration 声明当前类是一个配置类(相当于一个Spring配置的xml文件)
@ImportResource 加载xml配置
@PropertySource 向Spring的环境添加PropertySource
@Value 值得注入。经常与SpingEL表达式语言一起使用,注入普通字符,系统属性,表达式运算结果,其他Bean的属性,文件内容,网址请求内容,配置文件属性值等等
@Import 用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar,或者导入普通的POJO
@AliasFor 表示别名,它可以注解到自定义注解的两个属性上,表示这两个互为别名,也就是说这两个属性其实同一个含义
注入注解
@Primary 当优先使用哪个bean时,在该实现类上加上此注解
@Bean 声明当前方法的返回值为一个Bean放入spring容器
@Controller 组合注解(组合了@Component注解),应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上。
@Component 表示一个带注释的类是一个“组件”,成为Spring管理的Bean。当使用基于注解的配置和类路径扫描时,这些类被视为自动检测的候选对象。同时@Component还是一个元注解。
@Service 组合注解(组合了@Component注解),应用在service层(业务逻辑层)
@Repository 组合注解(组合了@Component注解),应用在dao层(数据访问层)
@Scope 用来声明spring容器中的对象应该处的限定场景或者说该对象的存活空间
@Lazy 用于指定该Bean是否取消预初始化
@Order Spring容器加载Bean的顺序
@DependsOn 表示被注解的bean在初始化时,指定的bean需要先完成初始化
依赖注解
@Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作
@Qualifier 按名称装配Bean
@Lookup 提供了一种方式以抽象方法的方式来获取Bean
条件注解
@Profile 表示当一个或多个指定的文件是活动的时,一个组件是有资格注册的。使用@Profile注解类或者方法,达到在不同情况下选择实例化不同的Bean。@Profile(“dev”)表示为dev时实例化。
@Conditional 根据满足某一特定条件创建特定的Bean
线程注解
@EnableScheduling 注解在配置类上,开启对计划任务的支持。
@Scheduled 注解在方法上,声明该方法是计划任务。支持多种类型的计划任务:cron,fixDelay,fixRate
@Schedules 聚合多个Scheduled批注的容器注解
@EnableAsync 开启异步任务支持。注解在配置类上
@Async 注解在方法上标示这是一个异步方法,在类上标示这个类所有的方法都是异步方法
其他注解
@DateTimeFormat 将String转换成Date,一般前台给后台传值时用
@NumberFormat 将String转换成Number,一般前台给后台传值时用
@EventListener 将方法标记为应用程序事件侦听器的注释
@Validated 配合BindingResult可以直接提供参数验证结果
扩展接口介绍
Bean接口
FactroyBean 它是一个能生产出当前对象的工厂Bean,它的实现和工厂模式及修饰器模式很像
InitialingBean 在spring初始化bean的时候会执行该接口afterPropertiesSet方法
DisposableBean 在spring销毁bean的时候会执行该接口destroy方法
ImportBeanDefinitionRegistrar 配合@import使用,它能够加以利用去达到动态注册bean到spring容器之中的效果。
Aware接口
BeanNameAware 该接口需要实现setBeanName方法,这个方法只是简单的返回我们当前的beanName
BeanFactoryAware 该接口需要实现setBeanFactory方法,这个方法可以拿到当前的beanFactory
ApplicationContextAware 该接口需要实现setApplicationContext方法,这个方法可以拿到当前的applicationContext
ApplicationEventPublisherAware 该接口需要实现setApplicationEventPublisher方法,这个方法可以拿到当前的applicationEventPublisher
BeanClassLoaderAware 该接口需要实现setBeanClassLoader方法,这个方法可以拿到当前classLoader
MessageSourceAware 该接口需要实现setMessageSource方法,这个方法可以拿到当前messageSource
NotificationPublisherAware 该接口需要实现setNotificationPublisher方法,这个方法可以拿到当前notificationPublisher
ResourceLoaderAware 该接口需要实现setResourceLoader方法,这个方法可以拿到当前resourceLoader
LoadTimeWeaverAware 该接口需要实现setLoadTimeWeaver方法,这个方法可以拿到当前loadTimeWeaver
EmbeddedValueResolverAware 该接口需要实现setEmbeddedValueResolver方法,这个方法可以拿到当前stringValueResolver
EnvironmentAware 该接口需要实现setEnvironment方法,这个方法可以拿到当前environment
ImportAware 该接口需要实现setImportMetadata方法,这个方法可以拿到当前annotationMetadata
PostProcessor接口
BeanFactoryPostProcessor 该接口需要实现postProcessBeanFactory方法,这个方法在当前BeanFactory初始化(spring容器加载bean定义文件)后、bean实例化之前执行,可以通过修改bean的定义属性,达到影响之后实例化bean的效果。
BeanDefinitionRegistryPostProcessor 该接口继承自BeanFactoryPostProcessor。postProcessBeanDefinitionRegistry方法是在所有Bean定义信息将要被加载,Bean实例还未创建的时候执行。
InstantiationAwareBeanPostProcessor 该接口继承自BeanPostProcessor是spring非常重要的拓展接口,代表这bean的一段生命周期
BeanPostProcessor 如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。
EventListener 接口
ApplicationListener 该接口需要实现onApplicationEvent方法,这个方法可以监听spring容器事件。