SpringMVC@Controller、@Service、@Repository和 @Component 将类标识为Bean,这样Spring就能对其依赖注入
Spring引入了一些注解用于简化 Spring 的开发。
@Repository注解它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。
具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类路径中的类并识别出 @Repository 注解,需要在 XML 配置文件中启用Bean 的自动扫描功能,这可以通过实现。如下所示:
// 首先使用 @Repository 将 DAO 类声明为Spring Bean
package cn.jobs1127.dao;
@Repository
public class CommonHibernateBaseDaoImpl implements ICommonHibernateBaseDao {……}
// 其次,在 XML 配置文件中启动 Spring 的自动扫描功能
<beans>
……
<context:annotation-config/>
<context:component-scan base-package="cn.jobs1127.dao"/>
……
</beans>
如此,我们就不再需要在 XML 中显式使用 进行Bean 的配置。Spring 在容器初始化时将自动扫描 base-package 指定的包及其子包下的所有 class文件,所有标注了 @Repository 的类都将被注册为 Spring Bean。
@Repository 只能标注在 DAO 类上。
该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。
Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
@Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。接收前台的请求/参数通过@Service服务层进行数据库等操作,将数据库的信息返回到前端,根据需要进行控制、跳转等操作。
@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
@Service 通常作用在业务层,也就服务层,但是目前该功能与 @Component 相同。在服务层通常自动注入与DB打交道的Dao Bean
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring会自动创建相应的Bean对象,并注册到 ApplicationContext 中。这些类就成了 Spring受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。
与通过 XML 配置的 Spring Bean 一样,通过上述注解标识的Bean,其默认作用域是”singleton”单例模式,为了配合这四个注解,在标注 Bean 的同时能够指定 Bean 的作用域,Spring2.5 引入了 @Scope 注解。使用该注解时只需提供作用域的名称就行了,如下所示:
@Scope(“prototype”)
@Repository
public class DemoJobs1127 { … }