SpringAOP 前置、後置、環繞增強

<strong>在SpringAOP中提供了前置、後置以及環繞增強機制。這些功能大大方便了我們對log、性能等方面的處理。下面就以一個實例來代碼講解AOP的增強功能。</strong>


    首先定義一個藉口Waiter

package com.jike.spring.chapter10.aop.advice;


public interface Waiter {
	void greet(String name);
	void server(String name);
}

    實現Waiter


package com.jike.spring.chapter10.aop.advice;

public class NativeWaiter implements Waiter{

	@Override
	public void greet(String name) {
		System.out.println("greet " + name);
	}

	@Override
	public void server(String name) {
		System.out.println("server " + name);
	}

}

前置增強類


package com.jike.spring.chapter10.aop.advice;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class WaiterBeforeAdvice implements MethodBeforeAdvice{

	@Override
	public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
		String user = (String) arg1[0];
		System.out.println("hello " + user);
	}

}


後置增強類

package com.jike.spring.chapter10.aop.advice;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class WaiterAfterAdvice implements AfterReturningAdvice{

	@Override
	public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
		System.out.println("this is after advice");
	}

}



環繞增強類


package com.jike.spring.chapter10.aop.advice;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class WaiterAroundAdvice implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation arg0) throws Throwable {
		Object obj[] = arg0.getArguments();
		String name = (String) obj[0];
		System.out.println("this is befor advice" + name);
		arg0.proceed();
		System.out.println("this is after advice" + name);
		return null;
	}

}

配置文件


<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

	<bean id="greetingBefore" class="com.jike.spring.chapter10.aop.advice.WaiterBeforeAdvice" />
	<bean id="greetingAfter" class="com.jike.spring.chapter10.aop.advice.WaiterAfterAdvice" />
	<bean id="greetingAround" class="com.jike.spring.chapter10.aop.advice.WaiterAroundAdvice" />
	<bean id="target" class="com.jike.spring.chapter10.aop.advice.NativeWaiter" />
	<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"
		p:proxyInterfaces="com.jike.spring.chapter10.aop.advice.Waiter"
		p:target-ref="target" p:interceptorNames="greetingAround" />
</beans>



測試類

package com.jike.spring.chapter10.aop.advice;

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

public class TestBeforeAdvice {
	public static void main(String[] args) {
		String path = "conf/conf-advice.xml";
		ApplicationContext acc = new ClassPathXmlApplicationContext(path);
		Waiter waiter = (Waiter) acc.getBean("waiter");
		waiter.greet("victor");
		waiter.server("victor");
	}
}

  怎麼樣?簡單易懂吧,希望對您的學習有所幫助!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章