在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