@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();
}
}