Spring之AOP(基于AspectJ的注解方式)

连接点:类中可以呗增强的方法。

切入点:类中实际被增强的方法。

增强:前置增强、后置增强、环绕增强、最终增强、异常增强。

切面:增强 作用到 切入点 的过程。

1.导包



2.创建目标类和增强类

MyTarget.java

package zh.spring.entity;

// 目标类
public class MyTarget {

	public void fun(){
		System.out.println("fun...");
	}
	
}

再增强类上面添加@Aspect,里面的方法上面添加 增强类型 和 切入点表达式 。

MyAdvice.java

package zh.spring.entity;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

// 增强类
@Aspect
public class MyAdvice {

//	切入点写法:execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
//	简单写法如下:
//	(1)execution(* zh.spring.entity.MyTarget.fun(..))
//	(2)execution(* zh.spring.entity.MyTarget.*(..))
//	(3)execution(* *.*(..))	

	@Before(value="execution(* zh.spring.entity.MyTarget.fun(..))")
	public void before(){
		System.out.println("before...");
	}
	
	@After(value="execution(* zh.spring.entity.MyTarget.fun(..))")
	public void after(){
		System.out.println("after...");
	}
	
	@Around(value="execution(* zh.spring.entity.MyTarget.fun(..))")
	public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
		System.out.println("around1...");
		proceedingJoinPoint.proceed();// 调用目标类被增强的方法(切入点)
		System.out.println("around2...");
	}
	
}

3.在src下创建bean.xml,引入约束


bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> 

	<bean id="myAdvice" class="zh.spring.entity.MyAdvice" scope="singleton"></bean>
	<bean id="myTarget" class="zh.spring.entity.MyTarget" scope="singleton"></bean>

	<!-- 开启AOP注解 -->
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

</beans>

4.测试

AOPTest.java

package zh.spring.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import zh.spring.entity.MyTarget;

public class AOPTest {

	public static void main(String[] args) {
		
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
		MyTarget myTarget = (MyTarget) applicationContext.getBean("myTarget");
		
		myTarget.fun();

	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_41706150/article/details/81054577