Spring 注解
?
使用 @Autowired 注释
Spring 2.5 引入了?@Autowired
?注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。来看一下使用@Autowired
?进行成员变量自动注入的代码:
清单 . 使用 @Autowired 注释的?
?
public class Group {
@Autowired
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
?@Autowired
?和?@Qualifier
?结合使用时,自动注入的策略就从 byType 转变成 byName 了。@Autowired
?可以对成员变量、方法以及构造函数进行注释,而?@Qualifier
?的标注对象是成员变量、方法入参、构造函数入参。正是由于注释对象的不同,所以 Spring 不将?@Autowired
?和?@Qualifier
?统一成一个注释类。下面是对成员变量和构造函数入参进行注释的代码:
@Resource
@Resource
?的作用相当于?@Autowired
,只不过?@Autowired
?按 byType 自动注入,面?@Resource
?默认按 byName 自动注入罢了。@Resource
?有两个属性是比较重要的,分别是 name 和 type,Spring 将?@Resource
?注释的 name 属性解析为 Bean 的名字,而 type 属性则解析为 Bean 的类型。所以如果使用 name 属性,则使用 byName 的自动注入策略,而使用 type 属性时则使用 byType 自动注入策略。如果既不指定 name 也不指定 type 属性,这时将通过反射机制使用 byName 自动注入策略。
?
?
@PostConstruct 和 @PreDestroy
Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,您既可以通过实现 InitializingBean/DisposableBean 接口来定制初始化之后 / 销毁之前的操作方法,也可以通过 <bean> 元素的 init-method/destroy-method 属性指定初始化之后 / 销毁之前调用的操作方法。关于 Spring 的生命周期,笔者在《精通 Spring 2.x—企业应用开发精解》第 3 章进行了详细的描述,有兴趣的读者可以查阅。
?
?
?
?
?@Component
虽然我们可以通过?@Autowired
?或?@Resource
?在 Bean 类中使用自动注入功能,但是 Bean 还是在 XML 文件中通过 <bean> 进行定义 —— 也就是说,在 XML 配置文件中定义 Bean,通过?@Autowired
?或?@Resource
?为 Bean 的成员变量、方法入参或构造函数入参提供自动注入的功能。能否也通过注释定义 Bean,从 XML 配置文件中完全移除 Bean 定义的配置呢?答案是肯定的,我们通过 Spring 2.5 提供的?@Component
?注释就可以达到这个目标了。
?
?
?
@Service用于标注业务层组件,
@Controller用于标注控制层组件(如struts中的action),
@Repository用于标注数据访问组件,即DAO组件,
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。?