@Test public void testRemoveAdvisorByReference() { TestBean target = new TestBean(); ProxyFactory pf = new ProxyFactory(target); NopInterceptor nop = new NopInterceptor(); CountingBeforeAdvice cba = new CountingBeforeAdvice(); Advisor advisor = new DefaultPointcutAdvisor(cba); pf.addAdvice(nop); pf.addAdvisor(advisor); ITestBean proxied = (ITestBean) pf.getProxy(); proxied.setAge(5); assertEquals(1, cba.getCalls()); assertEquals(1, nop.getCount()); assertTrue(pf.removeAdvisor(advisor)); assertEquals(5, proxied.getAge()); assertEquals(1, cba.getCalls()); assertEquals(2, nop.getCount()); assertFalse(pf.removeAdvisor(new DefaultPointcutAdvisor(null))); }
/** * Enhances the object on load. * * @param <T> Type of the object to enhance. * @param obj Object to augment/enhance. * @return Enhanced object. */ @SuppressWarnings({"unchecked"}) public static <T> T enhance(T obj) { ProxyFactory proxyFac = new ProxyFactory(obj); proxyFac.addAdvice(dfltAsp); proxyFac.addAdvice(setToValAsp); proxyFac.addAdvice(setToSetAsp); while (proxyFac.getAdvisors().length > 0) proxyFac.removeAdvisor(0); proxyFac.addAdvisor(new DefaultPointcutAdvisor( new GridifySpringPointcut(GridifySpringPointcut.GridifySpringPointcutType.DFLT), dfltAsp)); proxyFac.addAdvisor(new DefaultPointcutAdvisor( new GridifySpringPointcut(GridifySpringPointcut.GridifySpringPointcutType.SET_TO_VALUE), setToValAsp)); proxyFac.addAdvisor(new DefaultPointcutAdvisor( new GridifySpringPointcut(GridifySpringPointcut.GridifySpringPointcutType.SET_TO_SET), setToSetAsp)); return (T)proxyFac.getProxy(); } }
assertEquals(1, nop2.getCount()); pf.removeAdvisor(1); assertEquals(5, proxied.getAge()); assertEquals(1, cba.getCalls()); assertEquals(2, nop2.getCount()); pf.removeAdvisor(0); assertEquals(5, proxied.getAge()); assertEquals(1, cba.getCalls()); pf.removeAdvisor(-1); pf.removeAdvisor(2);
private static void removeAdvisor(Object proxy, Class<? extends Advice> adviceClass) { if (!AopUtils.isAopProxy(proxy)) { return; } ProxyFactory proxyFactory = null; if (AopUtils.isJdkDynamicProxy(proxy)) { proxyFactory = findJdkDynamicProxyFactory(proxy); } if (AopUtils.isCglibProxy(proxy)) { proxyFactory = findCglibProxyFactory(proxy); } Advisor[] advisors = proxyFactory.getAdvisors(); if (advisors == null || advisors.length == 0) { return; } for (Advisor advisor : advisors) { if (adviceClass.isAssignableFrom(advisor.getAdvice().getClass())) { proxyFactory.removeAdvisor(advisor); break; } } }
private static void removeAdvisor(Object proxy, Class<? extends Advice> adviceClass) { if(!AopUtils.isAopProxy(proxy)) { return; } ProxyFactory proxyFactory = null; if(AopUtils.isJdkDynamicProxy(proxy)) { proxyFactory = findJdkDynamicProxyFactory(proxy); } if(AopUtils.isCglibProxy(proxy)) { proxyFactory = findCglibProxyFactory(proxy); } Advisor[] advisors = proxyFactory.getAdvisors(); if(advisors == null || advisors.length == 0) { return; } for(Advisor advisor : advisors) { if(adviceClass.isAssignableFrom(advisor.getAdvice().getClass())) { proxyFactory.removeAdvisor(advisor); break; } } }
private static void removeAdvisor(Object proxy, Class<? extends Advice> adviceClass) { if (!AopUtils.isAopProxy(proxy)) { return; } ProxyFactory proxyFactory = null; if (AopUtils.isJdkDynamicProxy(proxy)) { proxyFactory = findJdkDynamicProxyFactory(proxy); } if (AopUtils.isCglibProxy(proxy)) { proxyFactory = findCglibProxyFactory(proxy); } if (proxyFactory == null) { return; } Advisor[] advisors = proxyFactory.getAdvisors(); if (advisors.length == 0) { return; } for (Advisor advisor : advisors) { if (adviceClass.isAssignableFrom(advisor.getAdvice().getClass())) { proxyFactory.removeAdvisor(advisor); break; } } }