首页 > HapiCMS, HapiShop > @Component @Controller @Service @Repository的作用
201501月1

@Component @Controller @Service @Repository的作用

@Component、@Repository、@Service、@Controller区别

很长时间没写代码了,把以前学的那点框架知识忘光了,最近在写Java开源商城HapiShop,发现用@Component标记一个组件,所以查询了其相关的一些资料:
Spring 2.5 中提供@Component 注释外,还定义了几个拥有特殊语义的注释,
分别是:@Repository、@Service、@Controller
在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。
虽然目前这3 个注释和 @Component 相比没有什么新意,但 Spring 将在以后的版本中为它们添加特殊的功能。
如果Web应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用上述注解对分层中的类进行注释,这样方便代码可阅读性也高。

@Component @Controller @Service @Repository的作用

1、@controller 控制器(注入服务)
2、@service 服务(注入dao)
3、@repository dao(实现dao访问)
4、@component (把普通pojo实例化到spring容器中,相当于配置文件中的<bean id=”” class=””/>)
@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。
下面写这个是引入component的扫描组件

<context:component-scan base-package="com.iitshare"/>

其中base-package为需要扫描的包,可以包括下面的子包,比如:com.iitshare.hapishop、com.iitshare.hapicms
1、@Service用于标注业务层组件
2、@Controller用于标注控制层组件(如struts中的action)
3、@Repository用于标注数据访问组件,即DAO组件.
4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
如下代码:

@RequestMapping("/admin/log")
public class LogController extends 
	BaseController {
	
}
@Service("logServiceImpl")
public class LogServiceImpl extends BaseServiceImpl<Log, Long> implements
		LogService {
}
@Repository("logDaoImpl")
public class LogDaoImpl extends BaseDaoImpl<Log, Long> implements 
	LogDao {
}

getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“***”)这样来指定。这种bean默认是单例的,如果想改变,可以使用以下方法:
@Service(“beanName”)
@Scope(“prototype”)来改变。
可以使用以下方式指定初始化方法和销毁方法(方法名任意):
@PostConstruct public void init() { }

博文中的代码来自Java开源商城HapiShopV1.0

文章作者: iitshare
本文地址:http://www.iitshare.com/role-of-component-repository.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

更多
本文目前尚无任何评论.

发表评论