Spring 核心使用介绍

266 阅读5分钟

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容器事件。