spring aop

来源:互联网 发布:摩卡监控软件 编辑:程序博客网 时间:2024/05/17 07:02

方式一实现MethodBeforeAdvice接口

方式二使用spring定义纯粹POJO切面

方式三与方式一一样  只是使用了spring的DefaultAdvisorAutoProxyCreator自动创建代理

package com.provider.aop;public interface Runable {public void run();}

package com.provider.aop;public class People implements Runable{@Overridepublic void run() {System.out.println("people run");}}

package com.provider.aop;import java.lang.reflect.Method;import org.springframework.aop.AfterReturningAdvice;import org.springframework.aop.MethodBeforeAdvice;public class RunAdice implements MethodBeforeAdvice,AfterReturningAdvice{@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {System.out.println(returnValue);System.out.println(method);System.out.println(target);System.out.println("afterReturning");}@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println(method);System.out.println(target);System.out.println("before");}}

package com.provider.aop;import org.aspectj.lang.JoinPoint;public class RunAdice2{public void afterReturning() {System.out.println("afterReturning*****");}public void beforeReturning(JoinPoint jp) {System.out.println("------");System.out.println("before*****"+jp.getTarget()+"/"+jp.getSignature().getName());}}

 <bean id="people" class="com.provider.aop.People"></bean><bean id="runAdice" class="com.provider.aop.RunAdice"></bean><bean id="runAdice2" class="com.provider.aop.RunAdice2"></bean><bean id="runPointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"><property name="pattern" value=".*run" /></bean><bean id="sleepHelperAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor"><property name="advice" ref="runAdice" /><property name="pointcut" ref="runPointcut" /></bean><bean id="peopleProxy" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="target" ref="people" /><property name="interceptorNames" value="runAdice" /><property name="proxyInterfaces" value="com.provider.aop.Runable" /></bean><aop:aspectj-autoproxy/><aop:config>    <aop:aspect ref="runAdice2">    <aop:before method="beforeReturning" pointcut="execution(* *.run(..))"/>    <aop:after method="afterReturning" pointcut="execution(* *.run(..))"/>    </aop:aspect>    </aop:config>

package com.provider.aop;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({"spring-core.xml"})public class AopTest {@Autowired@Qualifier("peopleProxy")Runable p;@Testpublic void testrun(){p.run();}}


使用DefaultAdvisorAutoProxyCreator

package com.provider.aop;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;import org.springframework.aop.support.RegexpMethodPointcutAdvisor;@Configurationpublic class AppConfig {public @Bean RunAdice runAdice(){return new RunAdice();}public @Bean(name="peple") People people(){return new People();}public @Bean RegexpMethodPointcutAdvisor RegexpMethodPointcutAdvisor(){ org.springframework.aop.support.RegexpMethodPointcutAdvisor regexpMethodPointcutAdvisor = new RegexpMethodPointcutAdvisor(); regexpMethodPointcutAdvisor.setAdvice(runAdice()); regexpMethodPointcutAdvisor.setPattern(".*run"); return regexpMethodPointcutAdvisor;}public @Bean DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator(){return new DefaultAdvisorAutoProxyCreator();}}

package com.provider.aop;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes={AppConfig.class})public class AppConfigTest {@AutowiredRunable p;@Testpublic void testrun(){p.run();}}


0 0
原创粉丝点击