Spring3.0注解依赖注入详解:@Repository、@Service、@Controller和@Component

需积分: 17 1 下载量 77 浏览量 更新于2024-09-18 收藏 64KB DOC 举报
"Spring3.0依赖注入详解" 在Spring3.0中,依赖注入(Dependency Injection,简称DI)是一个核心特性,它允许我们通过配置或编程方式将对象之间的依赖关系解耦,从而使代码更加灵活、可测试且易于维护。本节将深入探讨基于注解的依赖注入实现,特别是如何使用@Repository、@Service、@Controller和@Component来标识Bean。 1. **@Repository注解** @Repository注解最初是为了解决数据访问层(DAO层)的Bean定义问题。当你在DAO类上添加此注解时,Spring会将其识别为一个Bean,并自动管理其生命周期。此外,这个注解还有一个特殊功能,即它可以捕获DAO层的原始异常并将其转换为Spring的数据访问异常类型,这样可以确保异常处理与具体的数据访问技术无关,增加了应用程序的可移植性。 要启用自动扫描,你需要在XML配置文件中使用<context:component-scan/>元素,并指定基础包路径,例如`<context:component-scan base-package="bookstore.dao"/>`。这将告诉Spring去查找指定包及其子包下的所有带有@Repository注解的类,并将它们注册为Bean。 2. **@Component、@Service和@Controller注解** 随着Spring的发展,为了更好地适应不同层次的组件,Spring2.5引入了这3个新的注解: - **@Component**:这是一个泛化的注解,用于标记任何通用的组件。它是最基础的注解,适用于任何层次的类,但不携带特定层次的含义。 - **@Service**:这个注解常用于业务逻辑层(Service层)。尽管在功能上它与@Component相似,但使用@Service可以传达类的作用域,有助于代码的组织和理解。 - **@Controller**:专门用于表示Web层的控制器,处理HTTP请求和响应。它在MVC架构中起到关键作用,连接视图和模型。 这3个注解都可以替代@Repository,让Spring自动管理Bean,而不需要在XML配置文件中手动配置。 3. **自动装配(Autowired)** 除了使用注解标识Bean之外,Spring3.0还支持@Autowired注解来自动装配Bean的依赖。你可以在字段、setter方法或者构造函数上使用它,Spring会自动寻找类型匹配的Bean并注入。 ```java public class UserService { @Autowired private UserRepository userRepository; } ``` 在这个例子中,Spring会找到类型为UserRepository的Bean,并将其注入到UserService中。 4. **@Qualifier注解** 当存在多个相同类型的Bean时,@Qualifier注解可以帮助你指定确切的Bean。例如,如果你有两个同类型的Bean,你可以使用@Qualifier指定注入哪一个。 ```java public class UserService { @Autowired @Qualifier("userRepository1") private UserRepository userRepository; } ``` 这样,Spring就会寻找名为"userRepository1"的Bean进行注入。 5. **@Scope注解** 另一个有用的注解是@Scope,它用于指定Bean的作用域,如单例(singleton)、原型(prototype)等。 6. **总结** Spring3.0通过注解大大简化了Bean的配置,提高了开发效率。依赖注入机制使得对象之间的关系更加清晰,降低了代码间的耦合度。结合@Autowired、@Qualifier和@Scope等注解,你可以更灵活地控制Bean的创建、装配和作用域,实现高度模块化的应用架构。