SpringBoot AOP拦截器

在Spring里面还提供有一种AOP拦截器配置,不过大部分的AOP拦截器都是围绕着业务层进行拦截处理的。

1、建立一个普通的业务操作接口和它的子类:

package com.microboot.service;

import com.microboot.vo.Member2;

public interface IMemberService {

	public Member2 getInfo(long mid);
}

package com.microboot.service.impl;

import org.springframework.stereotype.Service;

import com.microboot.service.IMemberService;
import com.microboot.vo.Member2;

@Service
public class MemberServiceImpl implements IMemberService {

	@Override
	public Member2 getInfo(long mid) {
		Member2 vo = new Member2();
		vo.setMid(mid);
		vo.setName("KING");
		vo.setSalary(50000.00);
		return vo;
	}

}



现在业务层的操作完成之后随意去修改控制层,让控制层去完成业务层的调用。
package com.microboot.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.microboot.service.IMemberService;
import com.microboot.util.controller.AbstractBaseController;
import com.microboot.vo.Member;

@Controller
public class MemberController extends AbstractBaseController{
	
	@Resource
	private IMemberService memberService;
	
	@RequestMapping(value = "/member_get", method = RequestMethod.GET)
	@ResponseBody
	public Object get(long mid) {
		return this.memberService.getInfo(mid);
	}
	
}

http://localhost/member_get?mid=100

{"mid":100,"name":"KING","age":null,"birthday":null,"salary":50000.0}
3、现在的业务层处理只是一个纯粹的调用而已,但是现在希望对调用的过程进行拦截处理,所以要想实现这样的

处理,那么久需要引入新的开发依赖包,修改pom.xml配置文件:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>
4、编写一个AOP拦截的控制程序类。

package com.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);
	
	 private final String POINT_CUT = "execution(* com.microboot..service..*.*(..))";

	@Around(POINT_CUT)
	public Object aroundInvoke(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

http://localhost/member_get?mid=100

【*** MyInterceptor.preHandle ***】MemberController
【*** Service-Before ***】 执行参数: [100]
【*** Service-After ***】返回结果: Member2 [mid=100, name=KING, age=null, birthday=null, salary=50000.0]
【*** MyInterceptor.postHandle ***】MemberController
【*** MyInterceptor.postHandle ***】null
【*** MyInterceptor.afterCompletion ***】拦截处理完毕

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/88171156