aop-正则表达式方法切入点顾问

1、class MyAfterReturningAdvice

package com.aop08;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
//后置通知:可以获取目标方法的返回结果,但无法改变目标方法的结果
public class MyAfterReturningAdvice implements AfterReturningAdvice {

//在目标方法执行之后执行
//returnValue:目标方法的返回值
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
	System.out.println("执行后置通知方法");
	
}

}

2、class MyTest

package com.aop08;

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

public class MyTest {

public static void main(String[] args) {
	
	String resource = "com/aop08/applicationContext.xml";
	ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
	
	ISomeService service = (ISomeService) ac.getBean("serviceProxy");
	service.doFirst();
	System.out.println("------------------------------------");
	service.doSecond();
	System.out.println("------------------------------------");
	service.doThird();
}

}

3、applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- 注册目标对象 -->
<bean id="someService" class="com.aop08.SomeServiceImpl"/>

<!-- 注册切面:通知 -->
<bean id="myAdvice" class="com.aop08.MyAfterReturningAdvice"/>

<!-- 注册切面:顾问 -->
<bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
	<property name="advice" ref="myAdvice"/>
	<!-- 这里的正则表达式匹配的对象是全限定性方法名 -->
	<!-- <property name="pattern" value=".*doFirst|.*doSecond"/> -->
	<property name="patterns" value=".*doFirst,.*doSecond"/>
</bean>

<!-- 生成代理对象 -->
<bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
	<!-- 指定目标对象 -->
	<property name="target" ref="someService"/>
	<!-- 指定切面 -->
	<property name="interceptorNames" value="myAdvisor"/>
</bean>
发布了47 篇原创文章 · 获赞 1 · 访问量 384

猜你喜欢

转载自blog.csdn.net/weixin_43925059/article/details/104994260
今日推荐