在spring里面还提供有一种aop拦截器配置,不过大部分的aop拦截器都是围绕着业务层进行拦截处理的。
1.建立一个普通的业务操作接口和它的子类:
package cn.mldn.microboot.service;
import cn.mldn.microboot.vo.Member;
public interface IMemberService {
public Member get(long mid) ;
}
package cn.mldn.microboot.service.impl;
import org.springframework.stereotype.Service;
import cn.mldn.microboot.service.IMemberService;
import cn.mldn.microboot.vo.Member;
@Service
public class MemberServiceImpl implements IMemberService {
@Override
public Member get(long mid) {
Member vo = new Member();
vo.setMid(mid);
vo.setName("KING");
vo.setSalary(50000.00);
return vo;
}
}
现在业务层的操作完成之后,去修改控制层,让控制层进行业务层的调用
package cn.mldn.microboot.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.mldn.microboot.service.IMemberService;
import cn.mldn.microboot.util.controller.AbstractBaseController;
import cn.mldn.microboot.vo.Member;
@Controller
public class MemberController extends AbstractBaseController {
@RequestMapping(value = "/member_add_pre", method = RequestMethod.GET)
public String memberAddPre() {
return "member_add";
}
@RequestMapping(value = "/member_add", method = RequestMethod.POST)
@ResponseBody
public Object memberAdd(Member member) {
return member ;
}
@Resource
private IMemberService memberService ;
@RequestMapping(value = "/member_get", method = RequestMethod.GET)
@ResponseBody
public Object get(long mid) {
return this.memberService.get(mid) ;
}
}
3.现在的业务层只是纯粹的调用而已,但是现在希望对调用的过程进行拦截处理,所以要想实现这样的处理,那么就需要引入新的依赖包,修改pom.xml的配置文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
4.编写一个aop拦截的控制程序类
package cn.mldn.microboot.config;
import java.util.Arrays;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class ServiceAspect { // 此时定义有一个业务层的拦截处理
private Logger log = LoggerFactory.getLogger(ServiceAspect.class);
@Around("execution(* cn.mldn..service..*.*(..))")
public Object arroundInvoke(ProceedingJoinPoint point) throws Throwable {
this.log.info("【*** Service-Before ***】执行参数:"
+ Arrays.toString(point.getArgs()));
Object obj = point.proceed(point.getArgs()); // 进行具体业务调用
this.log.info("【*** Service-After ***】返回结果:" + obj);
return obj;
}
}
对于web拦截可以使用拦截器,而对于业务层的拦截可以使用Aspect表达式结合aop的拦截机制实现。