aop-环绕通知

1、class MyMethodInterceptor

package com.aop03;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
//环绕通知:可以修改目标方法的返回结果
public class MyMethodInterceptor implements MethodInterceptor {

@Override
public Object invoke(MethodInvocation invocation) 
		throws Throwable {
	System.out.println("执行环绕通知:目标方法执行之前");
	//执行目标方法
	Object result = invocation.proceed();
	System.out.println("执行环绕通知:目标方法执行之后");
	if (result != null) {
		result = ((String)result).toUpperCase();
	}
	return result;
}

}

2、Class MyTest

package com.aop03;

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

public class MyTest {

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

}

3、applicationContext.xml

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

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

猜你喜欢

转载自blog.csdn.net/weixin_43925059/article/details/104987157