Spring之AOP(基于AspectJ的xml配置)

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

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

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

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

1.导包



2.创建目标类和增强类

MyTarget.java

package zh.spring.entity;

// 目标类
public class MyTarget {

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

MyAdvice.java

package zh.spring.entity;

import org.aspectj.lang.ProceedingJoinPoint;

// 增强类
public class MyAdvice {

	public void before(){
		System.out.println("before...");
	}
	
	public void after(){
		System.out.println("after...");
	}
	
	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:config>
		<aop:pointcut expression="execution(* zh.spring.entity.MyTarget.fun(..))" id="pointcut1"/> <!-- 切入点 -->
		<aop:aspect ref="myAdvice"> <!-- 增强类 -->
			<aop:before method="before" pointcut-ref="pointcut1"/> <!-- 前置增强 -->
			<aop:after-returning method="after" pointcut-ref="pointcut1"/> <!-- 后置增强 -->
			<aop:around method="around" pointcut-ref="pointcut1"/> <!-- 环绕增强 -->
		</aop:aspect>
	</aop:config>

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

</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/81053942
今日推荐