Spring注解总结
@Autowired
@Autowired 注解,自动装配,默认按类型匹配的方式,在容器查找匹配的 Bean,当有且仅有一个匹配的 Bean 时,Spring 将其注入 @Autowired 标注的变量中。
@Autowired 注解有一个 required 属性,默认为 true,当没有找到相应的 Bean 对象时会抛出异常,如果不想抛出异常可以将 required 设置为 false。
@Qualifier
如果容器中有一个以上匹配的 Bean,则可以通过 @Qualifier 注解限定Bean的名称,与 @Autowired 配合使用。value 属性指定 Bean 的名称。
1 | @Autowired |
@Resource
@Resource 注解与 @Autowired 注解作用非常相似。
@Resource的装配顺序:
- @Resource 后面没有任何内容,默认通过 Name 属性去匹配 Bean,找不到再按 Type去匹配
- 指定了 Name 或者 Type 则根据指定的 Name 或者 Type 去匹配 Bean
- 指定了 Name 和 Type 则根据指定的 Name 和 Type 去匹配 Bean,任何一个不匹配都将报错
@Autowired和@Resource两个注解的区别:
- @Autowired 默认按照 byType 方式进行 Bean 匹配,@Resource 默认按照 byName 方式进行 Bean 匹配
- @Autowired 是 Spring 的注解,@Resource 是 J2EE 的注解
@Component/@Repository/@Service/@Controller
@Component/@Repository/@Service/@Controller 可以向 Spring 容器注册 Bean。
需要在 applicationContext.xml 中注册 <context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>,或者使用 @ComponentScan 注解指定扫描包。
@Component
@Component 是所有受 Spring 管理的组件的通用形式,@Component 注解可以放在类的头上,@Component 不推荐使用。
@Repository
@Repository 对应数据访问层(Dao 层) Bean。
1 |
|
@Service
@Service 对应的是业务层(Service 层) Bean。
1 |
|
@Controller
@Controller 对应表现层(Action 层) Bean。
value 属性用来指定 Bean 的名称,默认的名字为这个类的类名首字母小写。
1 |
|
这里的还使用了 @Scope 注解,@Scope(“prototype”) 表示将 Controller 的范围声明为原型,保证每一个请求都 new 一个 Controller 对象来处理。
Spring 默认 scope 是单例模式(scope=”singleton”),表示只会创建一个对象,每次访问都是同一对象。
@Configuration
@Configuration 用于定义配置类,可替换 xml 配置文件,被注解的类内部包含有一个或多个被 @Bean 注解的方法,这些方法将会被 AnnotationConfigApplicationContext 或 AnnotationConfigWebApplicationContext 类进行扫描,并用于构建 Bean 定义,初始化 Spring 容器。
@ConfigurationProperties/@EnableConfigurationProperties
@ConfigurationProperties 注解主要用来把 Properties 配置文件转化为 Bean 来使用的,而 @EnableConfigurationProperties 注解的作用是 @ConfigurationProperties 注解生效。
如果只配置 @ConfigurationProperties 注解,在 IOC 容器中是获取不到 Properties 配置文件转化的 Bean 的。
@ConfigurationProperties 注解可以把 Properties 文件转化为 Bean,然后使用 @Component 注解把该 Bean 注入到 IOC 容器中。
1 | @Component |
其他
1 | @Configuration 把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。 |