spring框架的常用注解说明

一,用于对象的注解-IOC相关注解

我们将用于被扫描创建对象的注解,统称为组件注解。

组件包括:@Component,@Controller,@Service,@Repository。

组件注解的功能都是标识类为注解的组件类,启动Spring框架的程序时,声明将这些组件类注入到Spring容器里面。意味着,只有加了这四个注解任何一个注解的类,在程序启动的时候,Spring就通过配置文件指定的路径将该路径下的所有带组件注解的类创建对象并且放在容器里面。

功能类似原来配置文件的标签

问题:明明一个@Component注解就可以满足了扫描的需要,为什么要有四个呢?

答:其实Spring第一版注解的实现(spring 2.5),就是使用一个@Component。从3.0以后,作者认为根据分层的需要,把它拆成了四个。为了可以让开发人员,可见即可得,一看到注解,立即知道类的性质。所以分成了四个

@Controller:用于声明表示层的组件注解
@Service:用于声明服务层的组件注解
@Repository:用于声明持久层的组件注解
@Component:用于声明三层以外的组件注解

问题:那么,这四个注解交换使用会报错吗。如:持久层,我放@Service标记。
答:处理@Controller在SpringMVC里面有强制的要求,SpringMVC的表示层必须使用@Controller组件注解。其他情况,用乱了是不会报错的,不过我们必须不能用乱。不遵守规范,不然别人无法跟你一起开发了。

二,用于依赖注入的注解

回顾:XML配置文件使用实现注入的。通过注入注解也可以实现。

Spring提供了两套注解可以解决依对象依赖注入的方案

1,@Autowired +@Qualifier():是Spring定义的标签

2,@Resouce:是J2EE的规范
2.1@Autowired注解

@Autowired注解:用于给引用注入容器的对象。
①.@Autowired标签贴在字段或者setter方法上
②.默认情况下@Autowired标签必须要能找到对应的对象,否则报错。不过,可使用required=false来避免该问题:@Autowired(required=false)
③.@Autowired找bean的方式:
(1)首先按照依赖对象的类型找,如果找到则使用setter方法或者字段直接注入;
(2)如果在Spring上下文中找到多个匹配的类型,再按照名字去找,如果没有匹配则报错;
(3)可以通过使用@Qualifier("otherBean")标签来规定依赖对象按照bean的id+类型去找

问题: 如果构造函数的参数类型对应的bean有多个,会抛出异常

 * org.springframework.beans.factory.NoUniqueBeanDefinitionException 不是唯一的bean异常
 * 解决方案: 在参数前面 使用 @Qualifier("service1") 注解
 * 从多个bean 获取指定 id 对应的bean即可

@Resource 注解

@Resource 功能等同 @Autowired + @Qualifier ,等同配置文件标签
@Resource注解:用于给引用注入容器的对象,可以通过name属性指定对象名

注意事项:@Resource只能使用字段和setter方法,不能注入构造方法

你可能感兴趣的:(spring框架的常用注解说明)