首页 / 软件开发 / JAVA / 详解Spring 3.0基于Annotation的依赖注入实现
详解Spring 3.0基于Annotation的依赖注入实现2011-08-13 IBM 张建平简介:Spring 的依赖配置方式与 Spring 框架的内核自身是松耦合设计的。然而,直到 Spring 3.0 以前,使用 XML 进行依赖配置几乎是唯一的选择。Spring 3.0 的出现改变了这一状况,它提供了一系列 的针对依赖注入的注解,这使得 Spring IoC 在 XML 文件之外多了一种可行的选择。本文将详细介绍如 何使用这些注解进行依赖配置的管理。使用 @Repository、@Service、@Controller 和 @Component 将类标识为 BeanSpring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository 注解便属于 最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO 类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用 Bean 的自动扫描功能,这可以通过 <context:component-scan/> 实现。如下所 示:// 首先使用 @Repository 将 DAO 类声明为 Bean
package bookstore.dao;
@Repository
public class UserDaoImpl implements UserDao{ …… }
// 其次,在 XML 配置文件中启动 Spring 的自动扫描功能
<beans … >
……
<context:component-scan base-package=”bookstore.dao” />
……
</beans>如此,我们就不再需要在 XML 中显式使用 <bean/> 进行 Bean 的配置。Spring 在容器初始化 时将自动扫描 base-package 指定的包及其子包下的所有 class 文件,所有标注了 @Repository 的类都 将被注册为 Spring Bean。为什么 @Repository 只能标注在 DAO 类上呢?这是因为该注解的作用不只是将类识别为 Bean,同时 它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 Spring 本身提供了一 个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常 ,使得异常独立于底层的框架。Spring 2.5 在 @Repository 的基础上增加了功能类似的额外三个注解:@Component、@Service、 @Constroller,它们分别用于软件系统的不同层次:@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。@Service 通常作用在业务层,但是目前该功能与 @Component 相同。@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring 会自动创建 相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring 受管组件。这 三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。