组件注册:@Component @Repository @Service @Controller
作用域:类
启用包扫描后,包及子包下的类如果使用了这些注解,则会被实例化到Spring容器中,作为组件,可以在其它组件中作为依赖注入。
@Component是任何Spring管理的组件或bean的通用构造型。
@Repository是持久层的构造型。
@Service是服务层的构造型。
@Controller是表示层(spring-MVC)的构造型。
配置:@Configuration
作用域:类
对于配置类,可以在方法上使用@Bean注解,Spring会调用该方法,将返回值作为组件。
配置导入:@Import
配置类可以导入其它的配置类,不需要把所有的 @Configuration 放到一个类中。
@Enable...注解就是通过@Import导入了默认的配置类。
@Import(value = [Hibernate::class, Other::class]) // 或者
@Import(Hibernate::class, Other::class)
class WebConfig : WebMvcConfigurer { ... }
@Bean及其条件化、作用域
@Bean的装配可以是条件控制的,比如在测试环境下使用@Profile
注解控制Bean是否应该激活,然后使用@ActiveProfiles
注解设置激活profile。
@Conditional
Spring 4引入了一个新的@Conditional
注解,它可以用到带有@Bean注解的方法上。如果给定的条件计算结果为true,就会创建这个bean,否则的话,这个bean会被忽略。设置给@Conditional的类可以是任意实现了Condition
接口的类型。可以看出来,这个接口实现起来很简单直接,只需提供matches()方法的实现即可。如果matches()方法返回true,那么就会创建带有@Conditional注解的bean。如果matches()方法返回false,将不会创建这些bean。@Primary
标示首选的bean。@Scope
Spring定义了多种作用域,可以基于这些作用域创建bean,包括:
单例(Singleton): 在整个应用中,只创建bean的一个实例。默认。
原型(Prototype): 每次注入或者通过Spring应用上下文获取的时候,都会创建一个新的bean实例。
会话(Session): 在Web应用中,为每个会话创建一个bean实例。
请求(Rquest): 在Web应用中,为每个请求创建一个bean实例。
@Scope接收一个字符参数,但是最好使用常量,定义在类ConfigurableBeanFactory的SCOPE_xxx域中。
@ResponseBody @RequestBody
申请由消息转换器处理内容,即处理参数及返回值。