第八章:基础拦截器-2. AOP拦截器

在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

相关文章
相关标签/搜索