在spring里面还提供有一种aop拦截器配置,不过大部分的aop拦截器都是围绕着业务层进行拦截处理的。java
1.创建一个普通的业务操做接口和它的子类:web
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; } }
如今业务层的操做完成以后,去修改控制层,让控制层进行业务层的调用spring
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的配置文件:app
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
4.编写一个aop拦截的控制程序类ide
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的拦截机制实现。spring-boot