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

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

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

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

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

 

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

请看下面的一个例子

dao层

package cn.lonecloud.pagekageauto.dao;


/**
 * dao层的接口
 * @Title: UserDao.java
 * @Package cn.lonecloud.pagekageauto.dao
 * @Description: 
 * @author lonecloud
 * @date 2016年8月7日 上午11:49:47
 */
public interface UserDao {
    
    public void save();
}

dao层实现类

  package cn.lonecloud.pagekageauto.dao.impl;
  
  import org.springframework.stereotype.Repository;
  
  import cn.lonecloud.pagekageauto.dao.UserDao;
  /**
   * dao层的实现类
   * @Title: UserDaoImpl.java
   * @Package cn.lonecloud.pagekageauto.dao.impl
   * @Description: 
   * @author lonecloud
   * @date 2016年8月7日 上午11:50:04
   */
   @Repository
   public class UserDaoImpl implements UserDao {
 
     @Override
     public void save() {
         System.out.println("测试保存");
     }
     //进行业务代码的实现
 }

Service层

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

service实现类 

package cn.lonecloud.pagekageauto.service.Impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.lonecloud.pagekageauto.dao.UserDao;
import cn.lonecloud.pagekageauto.service.UserService;
/**
 * service的实现类    
 * @Title: UserServiceImpl.java
 * @Package cn.lonecloud.pagekageauto.service.Impl
 * @Description: 
 * @author lonecloud
 * @date 2016年8月7日 上午11:50:36
 */
@Service
public class UserServiceImpl implements UserService{
    //下面进行业务代码的实现
    @Autowired//自动注入
    UserDao userDao;

    @Override  // 系统检查重写方法的正确性  可不写
    public void Usersave() {
        // TODO Auto-generated method stub
        System.out.println("service执行保存方法");
        userDao.save();
    }    
}

dto中间类

  package cn.lonecloud.pagekageauto.dto;
 
 import org.springframework.stereotype.Component;
 /**
  * 中间类
  * @Title: DtoClass.java
  * @Package cn.lonecloud.pagekageauto.dto
  * @Description: 
  * @author lonecloud
  * @date 2016年8月7日 上午11:51:46
  */
 @Component
 public class DtoClass {
     public void say(){
         System.out.println("我是dto");
     }
 }

控制层

package cn.lonecloud.pagekageauto.Controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import cn.lonecloud.pagekageauto.dto.DtoClass;
import cn.lonecloud.pagekageauto.service.UserService;
/**
 * 控制层类
 * @Title: UserController.java
 * @Package cn.lonecloud.pagekageauto.Controller
 * @Description: 
 * @author lonecloud
 * @date 2016年8月7日 上午11:50:56
 */
@Controller
public class UserController {
    
    @Autowired
    private UserService userService;
    @Autowired
    public DtoClass dtoClass;
    /**
     * 保存方法
     * @Description:
     */
    public void save(){
        System.out.println("控制层save");
        dtoClass.say();
        userService.Usersave();
    }
}

测试类

package cn.lonecloud.test.autoTest;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;

import cn.lonecloud.pagekageauto.UserBean;
import cn.lonecloud.pagekageauto.Controller.UserController;
import cn.lonecloud.util.SpringUtil;

public class MyTest {
    ApplicationContext applicationContext = null;

    @Before
    public void before() {
        applicationContext = SpringUtil.getApplicationContext();
    }
/*
 aop中@Around @Before @After三个注解的区别
 @Before是在所拦截方法执行之前执行一段逻辑。@After 是在所拦截方法执行之后执行一段逻辑。
 @Around是可以同时在所拦截方法的前后执行一段逻辑。
*/
    @Test
    public void controller(){
        UserController controller = applicationContext.getBean(UserController.class);
        controller.save();
    }
}

猜你喜欢

转载自blog.csdn.net/huang_ftpjh/article/details/82963271