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

时间:2021-08-01 12:29:42

@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();
} // @Test
// public void Test01() {
//
// UserBean userBean = applicationContext.getBean(UserBean.class);
// userBean.setAddress("sca");
// System.out.println(userBean);
// System.out.println(userBean.hashCode());
// UserBean userBean2 = applicationContext.getBean(UserBean.class);
// userBean2.setAddress("cds");
// System.out.println(userBean2.hashCode());
// System.out.println(userBean2);
// }
@Test
public void controller(){
UserController controller = applicationContext.getBean(UserController.class);
controller.save();
}
}