项目中使用注解方式
- spring配置文件中,配置上下文组件扫描器
<context:component-scan base-package="com.xmy.gte.web" />
- 在配置扫描器的范围中就可以使用spring支持的注解了
Spring支持(以下列出常用注解)
1、自己定义的注解
类、方法。控制层,用来配置请求url
@RequestMapping
类上的注解
@Component 组件
@Repository 数据访问层
@Service 业务层
@Controller 控制层
成员变量、方法
@Autowired 注入bean,默认按byType策略注入,联合@Qualifier后按照byName策略注入
成员变量、方法参数
@Qualifier 区分相同类型的不同实现或者实例
方法。便是异步请求的方法体
@ResponseBody
下面的不太明白用法,待后续补充
@Value
@Required
2、支持JSR-250 的注解
@Resource 注入bean,默认按byName策略注入,用法同@Autowired
@PostConstruct 容器启动注入bean执行,常用来初始化配置数据
@PreDestroy bean被销毁前执行
Spring注入时可能出现的问题
1、找不到抛出异常
在默认情况下使用 @Autowired (按byType注入)注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。
2、不确定容器是否有某个类,不希望spring启动报错
当不能确定 Spring 容器中一定拥有某个类的 Bean 时,可以在需要自动注入该类 Bean 的地方可以使用 @Autowired(required = false),这等于告诉 Spring:在找不到匹配 Bean 时也不报错。
3、多个类型相同的bean注入,无法匹配报错
Spring 容器中配置了两个类型为 Office 类型的 Bean,当对 Boss 的 office 成员变量进行自动注入时,Spring 容器将无法确定到底要用哪一个 Bean,因此异常发生了。
Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了
@Qualifier(“office”) 中的 office 是 Bean 的名称,所以 @Autowired 和@Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。@Autowired 可以对成员变量、方法以及构造函数进行注释,而@Qualifier 的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将 @Autowired 和@Qualifier 统一成一个注释类。