Spring中的注解@Service @Component @Controller @Repository区别

@Service用于标注业务层组件,

@Controller用于标注控制层组件(如struts中的action),

@Repository用于标注数据访问组件,即DAO组件,

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

这四个注解其实都是和Component差不多只是在语义上有些不一样,修饰的方法

请看下面的一个例子

dao层

 1 package cn.lonecloud.pagekageauto.dao;
 2
 3
 4 /**
 5  * dao层的接口
 6  * @Title: UserDao.java
 7  * @Package cn.lonecloud.pagekageauto.dao
 8  * @Description:
 9  * @author lonecloud
10  * @date 2016年8月7日 上午11:49:47
11  */
12 public interface UserDao {
13
14     public void save();
15 }

dao层实现类

 1 package cn.lonecloud.pagekageauto.dao.impl;
 2
 3 import org.springframework.stereotype.Repository;
 4
 5 import cn.lonecloud.pagekageauto.dao.UserDao;
 6 /**
 7  * dao层的实现类
 8  * @Title: UserDaoImpl.java
 9  * @Package cn.lonecloud.pagekageauto.dao.impl
10  * @Description:
11  * @author lonecloud
12  * @date 2016年8月7日 上午11:50:04
13  */
14 @Repository
15 public class UserDaoImpl implements UserDao {
16
17     @Override
18     public void save() {
19         System.out.println("测试保存");
20     }
21     //进行业务代码的实现
22 }

Service层

 1 package cn.lonecloud.pagekageauto.service;
 2 /**
 3  * service接口
 4  * @Title: UserService.java
 5  * @Package cn.lonecloud.pagekageauto.service
 6  * @Description:
 7  * @author lonecloud
 8  * @date 2016年8月7日 上午11:50:20
 9  */
10 public interface UserService {
11     public void Usersave();
12 }

service实现类

 1 package cn.lonecloud.pagekageauto.service.Impl;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5
 6 import cn.lonecloud.pagekageauto.dao.UserDao;
 7 import cn.lonecloud.pagekageauto.service.UserService;
 8
 9 /**
10  * service的实现类
11  * @Title: UserServiceImpl.java
12  * @Package cn.lonecloud.pagekageauto.service.Impl
13  * @Description:
14  * @author lonecloud
15  * @date 2016年8月7日 上午11:50:36
16  */
17 @Service
18 public class UserServiceImpl implements UserService{
19     //下面进行业务代码的实现
20     @Autowired//自动注入
21     UserDao userDao;
22
23     @Override
24     public void Usersave() {
25         // TODO Auto-generated method stub
26         System.out.println("service执行保存方法");
27         userDao.save();
28     }
29
30 }

dto中间类

 1 package cn.lonecloud.pagekageauto.dto;
 2
 3 import org.springframework.stereotype.Component;
 4 /**
 5  * 中间类
 6  * @Title: DtoClass.java
 7  * @Package cn.lonecloud.pagekageauto.dto
 8  * @Description:
 9  * @author lonecloud
10  * @date 2016年8月7日 上午11:51:46
11  */
12 @Component
13 public class DtoClass {
14     public void say(){
15         System.out.println("我是dto");
16     }
17 }

控制层

 1 package cn.lonecloud.pagekageauto.Controller;
 2
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Controller;
 5
 6 import cn.lonecloud.pagekageauto.dto.DtoClass;
 7 import cn.lonecloud.pagekageauto.service.UserService;
 8 /**
 9  * 控制层类
10  * @Title: UserController.java
11  * @Package cn.lonecloud.pagekageauto.Controller
12  * @Description:
13  * @author lonecloud
14  * @date 2016年8月7日 上午11:50:56
15  */
16 @Controller
17 public class UserController {
18
19     @Autowired
20     private UserService userService;
21     @Autowired
22     public DtoClass dtoClass;
23     /**
24      * 保存方法
25      * @Description:
26      */
27     public void save(){
28         System.out.println("控制层save");
29         dtoClass.say();
30         userService.Usersave();
31     }
32 }

测试类

 1 package cn.lonecloud.test.autoTest;
 2
 3 import org.junit.Before;
 4 import org.junit.Test;
 5 import org.springframework.context.ApplicationContext;
 6
 7 import cn.lonecloud.pagekageauto.UserBean;
 8 import cn.lonecloud.pagekageauto.Controller.UserController;
 9 import cn.lonecloud.util.SpringUtil;
10
11 public class MyTest {
12     ApplicationContext applicationContext = null;
13
14     @Before
15     public void before() {
16         applicationContext = SpringUtil.getApplicationContext();
17     }
18
19 //    @Test
20 //    public void Test01() {
21 //
22 //        UserBean userBean = applicationContext.getBean(UserBean.class);
23 //        userBean.setAddress("sca");
24 //        System.out.println(userBean);
25 //        System.out.println(userBean.hashCode());
26 //        UserBean userBean2 = applicationContext.getBean(UserBean.class);
27 //        userBean2.setAddress("cds");
28 //        System.out.println(userBean2.hashCode());
29 //        System.out.println(userBean2);
30 //    }
31     @Test
32     public void controller(){
33         UserController controller = applicationContext.getBean(UserController.class);
34         controller.save();
35     }
36 }

时间: 2024-08-25 11:16:20

Spring中的注解@Service @Component @Controller @Repository区别的相关文章

关于Spring注解 @Service @Component @Controller @Repository 用法

@Component 相当于实例化类的对象,其他三个注解可以理解为@Component的子注解或细化. 在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spring容器管理的类,此类将有spring扫描并加入容器参与ioc.即就是该类已经拉入到spring的管理中了. 通过在 classpath 中通过自动扫描方式把组建纳入 spring 容器管理. 要使用自动扫描机制我们需要打开一下配置信息: Bean.xml代码    <?xml version= 

Spring中常用注解的介绍

spring中使用注解时配置文件的写法: <?xml version="1.0" encoding="UTF-8"?> <span style="font-size:18px;"><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

Spring中的注解 @Qualifier

在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个.当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean. Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常. @Qualifier("XXX")

spring中@Resource注解的应用

前言,spring是一个非常优秀的框架,在依赖IOC编程方面,手工方式提供了两种方式注入Bean,XML配置和使用注解+自动扫描package的方式 [email protected]应用在字段上,则注入规则是: a.先使用字段名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败 b.如果字段名字没有匹配到Bean则spring会尝试采用字段类型匹配,如果找打bean则注入,如果字段类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个bean的异常. 注入失败. [em

Spring中使用注解时启用&lt;context:component-scan/&gt;

在spring中使用注解方式时需要在spring配置文件中配置组件扫描器:http://blog.csdn.net/j080624/article/details/56277315 <context:component-scan>详解:http://outofmemory.cn/java/spring/spring-DI-with-annotation-context-component-scan 原文地址:https://www.cnblogs.com/jeryM/p/8427366.htm

spring 中使用注解

1.要在applicationContext.xml中配置扫描哪个包下的注解 <!-- 指定扫描cn.itcast.bean报下的所有类中的注解. 注意:扫描包时.会扫描指定报下的所有子孙包 --> <context:component-scan base-package="cn.itcast.bean"></context:component-scan> 上面这个配置说明只扫描cn.itcast.bean包以及子包中的注解 2.注解说明(实体类上的

Spring中@Autowired注解与自动装配

1 使用配置文件的方法来完成自动装配我们编写spring 框架的代码时候.一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量.并且要配套写上 get 和 set方法.比如:Boss 拥有 Office 和 Car 类型的两个属性:public class Boss { private Car car; private Office office; // 省略 get/setter @Override public String toString() { retu

Spring中@相关注解的意义

1.@controller 控制器(注入服务) 用于标注控制层,相当于struts中的action层 2.@service 服务(注入dao) 用于标注服务层,主要用来进行业务的逻辑处理 3.@repository(实现dao访问) 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件. 4.@component (把普通pojo实例化到spring容器中,相当于配置文件中的 <bean id="" class=""/>) 泛指各种组件,就是说

Spring 中的注解

1.普通方式注解 a.在配置文件中配置 1.导入命名空间              xmlns:context="http://www.springframework.org/schema/context"              http://www.springframework.org/schema/context             http://www.springframework.org/schema/context/spring-context-2.5.xsd