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

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

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

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

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

请看下面的一个例子

dao层

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

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. }

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

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

    @Component 相当于实例化类的对象,其他三个注解可以理解为@Component的子注解或细化. 在annotaion配置注解中用@Component来表示一个通用注释用于说明一个类是一个spr ...

  2. Spring中的注解@Value("#{}")与@Value("${}")的区别

    1 @Value("#{}") SpEL表达式 @Value("#{}") 表示SpEl表达式通常用来获取bean的属性,或者调用bean的某个方法.当然还有可 ...

  3. spring----spring中的注解@service等的作用

    service  是有用的相当于 xml配置中得bean  id = service  也可以不指定 不指定相当于 bean id =  com. service.service 就是这个类的全限定名 ...

  4. Spring中常用注解的介绍

    spring中使用注解时配置文件的写法: <?xml version="1.0" encoding="UTF-8"?> <span style ...

  5. Spring中常用注解

    1.@Component 创建类对象,相当于配置<bean/> 2.@Service @Service与@Component功能相同,写在ServiceImpl类上 3.@Reposito ...

  6. 【进阶】Spring中的注解与反射

    [进阶]Spring中的注解与反射 目录 [进阶]Spring中的注解与反射 前言 一.内置(常用)注解 1.1@Overrode 1.2@RequestMapping 1.3@RequestBody ...

  7. Spring中Value注解的使用

    Spring中Value注解的使用 分类: Spring2014-08-16 17:28 2985人阅读 评论(0) 收藏 举报 有的时候我们定义了Properties文件,并且使用Spring的Pr ...

  8. 全面解析Spring中@ModelAttribute注解的用法

    本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:全面解析Spring中@ModelAttribute注解的用法: @ModelAttribute注解用于将方法的参数或方法的返回值绑定到 ...

  9. Spring中异步注解@Async的使用、原理及使用时可能导致的问题

    前言 其实最近都在研究事务相关的内容,之所以写这么一篇文章是因为前面写了一篇关于循环依赖的文章: <面试必杀技,讲一讲Spring中的循环依赖> 然后,很多同学碰到了下面这个问题,添加了S ...

随机推荐

  1. Hyperledger Fabric Read-Write set semantics——读写集

    Read-Write set semantics(读写集) 本文讨论了关于读写集当前实现的细节. Transaction simulation and read-write set(事务模拟和读写集) ...

  2. 原生 JS 实现一个瀑布流插件

    更好的阅读体验,点击 原文地址 瀑布流布局中的图片有一个核心特点 -- 等宽不定等高,瀑布流布局在国内网网站都有一定规模的使用,比如pinterest.花瓣网等等.那么接下来就基于这个特点开始瀑布流探 ...

  3. MySQL服务器最大连接数怎么设置才合理[转]

    如果mysql 连接数据设置不合理可能会导致很小的流量mysql就提示MySQL: ERROR 1040: Too many connections错误了,那么要如何才算是合理设置mysql最大连接数 ...

  4. linux批量添加10个用户并将其随机密码和用户名写入文件

    需求: 批量新建10个测试用户,并且让其密码随机,把用户名和密码写入一个文件,并有创建时间和创建者 #!/usr/bin/python # -*- coding: utf-8 -*- import o ...

  5. Oracle 视图 (待更新, 缓存)

    参考: 视图.索引.存储过程优缺点: http://www.cnblogs.com/SanMaoSpace/p/3147059.html oracle视图总结(转):http://tianwei013 ...

  6. JMeter之断言 - 响应文本

    1.  响应数据: 2.  添加响应断言: 3.设置响应断言,本例中 设置 响应文本 中 包括 success 字符串的 为真,即通过. 4.如果设置 响应文本 中 包括 error 字符串的 为真, ...

  7. awk 指定{}内x的替换

    替换{}中的x为;   原字符串 oxo{axbxc}oxo{dxexf}oxo 结果 oxo{a;b;c}oxo{d;e;f}oxo     awk '{for(i=1;i<=NF;i++){ ...

  8. 一个特殊的List去重问题的解决方案

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7039842.html 场景描述:公司新活动,需要在活动页面显示指定利率的四种投资项目,并且 ...

  9. [DeeplearningAI笔记]改善深层神经网络_深度学习的实用层面1.10_1.12/梯度消失/梯度爆炸/权重初始化

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.10 梯度消失和梯度爆炸 当训练神经网络,尤其是深度神经网络时,经常会出现的问题是梯度消失或者梯度爆炸,也就是说当你训练深度网络时,导数或坡 ...

  10. 本地工程引入maven工程的配置方式

    一.准备 IDE: IntelliJ IDEA 2016.3.1 maven: 3.5.2 JDK: 1.8 操作系统: Window 7 二.配置 1. maven 3.5 下载地址:http:// ...