公司网站设计注意事项,北京活动策划公司排行,做期货到哪个网站看新闻,什么是软件外包产业2019独角兽企业重金招聘Python工程师标准 可以通过注解的方式来自定义代理对象的创建#xff0c;同时也可以通过SpringAPI#xff0c;手动编程的方式来创建代理对象。 几个重要的API#xff1a; ProxyFactory\MethodInterceptor\Advice\AfterReturningAdvice\… 2019独角兽企业重金招聘Python工程师标准 可以通过注解的方式来自定义代理对象的创建同时也可以通过SpringAPI手动编程的方式来创建代理对象。 几个重要的API ProxyFactory\MethodInterceptor\Advice\AfterReturningAdvice\MethodBeforeAdvice 直接粘贴代码代码能说明一切 /** * */ package cn.hessian.proxy; import java.lang.reflect.Method; import org.aopalliance.intercept.Interceptor; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.junit.Test; import org.springframework.aop.AfterAdvice; import org.springframework.aop.AfterReturningAdvice; import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.framework.ProxyFactory; import cn.hessian.service.HelloWorldService; import cn.hessian.service.impl.HelloWorldServiceImpl2; /** * author beijing * 2013-4-2 */ public class SpringProgramicProxyDemo { Test public void test(){ //代理对象需要的实现的接口 Class[] interfacesnew Class[]{HelloWorldService.class}; //利用spring的API,创建代理工厂 ProxyFactory proxyFactorynew ProxyFactory(interfaces); //设置目标对象 proxyFactory.setTarget(new HelloWorldServiceImpl2()); /** * Set whether proxies created by this configuration should be prevented from being cast to Advised to query proxy status. Default is false, meaning that any AOP proxy can be cast to Advised. * */ proxyFactory.setOpaque(true); //添加方法前置通知 proxyFactory.addAdvice(new MethodBeforeAdvice() { Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println(1111111111在方法调用之前拦截); } }); //可以添加多个方法前置或者后置通知 proxyFactory.addAdvice(new MethodBeforeAdvice() { Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out.println(22222222在方法调用之前拦截); } }); //可以添加多个方法前置或者后置通知 proxyFactory.addAdvice(new AfterReturningAdvice() { Override public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println(方法完成之后调用的方法11111); } }); //可以添加多个方法前置或者后置通知 proxyFactory.addAdvice(new AfterReturningAdvice() { Override public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { System.out.println(方法完成之后调用的方法22222); } }); //对于环绕通知只能添加一个,多添加也是没有用的spring会选第一个advice请看结果 proxyFactory.addAdvice(new MethodInterceptor() { Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println(1111111环绕通知); Object[] paramsinvocation.getArguments(); Method methodinvocation.getMethod(); Object targetinvocation.getThis(); Object bytesmethod.invoke(target, params); byte[] result(byte[]) bytes; System.out.println(1111111111环绕通知生成的结果--new String(result)); return 北京生活圈.getBytes(); } }); //对于环绕通知只能添加一个,多添加也是没有用的spring会选第一个advice请看结果 proxyFactory.addAdvice(new MethodInterceptor() { Override public Object invoke(MethodInvocation invocation) throws Throwable { System.out.println(22222环绕通知); Object[] paramsinvocation.getArguments(); Method methodinvocation.getMethod(); Object targetinvocation.getThis(); Object bytesmethod.invoke(target, params); byte[] result(byte[]) bytes; System.out.println(222222环绕通知生成的结果--new String(result)); return bytes; } }); Object proxyproxyFactory.getProxy(proxyFactory.getClass().getClassLoader()); Class[] intersproxy.getClass().getInterfaces(); for(Class str: inters ){ System.out.println(str.getSimpleName()); } HelloWorldService helloWorldService(HelloWorldService)proxy; System.out.println(new String(helloWorldService.sayHelloWorld(北京))); } } 生成的结果为: HelloWorldService SpringProxy 1111111111在方法调用之前拦截 22222222在方法调用之前拦截 1111111环绕通知 1111111111环绕通知生成的结果--你好 北京 方法完成之后调用的方法22222 方法完成之后调用的方法11111 北京生活圈 转载于:https://my.oschina.net/hotbain/blog/119420