第八章:基礎攔截器-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

相關文章
相關標籤/搜索