builder.setTarget(targetClass); builder.setTargetProxyClassName(this.getClass().getPackage().getName() + '.' + targetClass.getSimpleName()); wrappedStatement = builder.define(); builder.injectTargetIntoWrapper(preparedStatement, wrapper);
@Override public WrapperProxettaFactory proxy() { return new WrapperProxettaFactory(this); }
@Test void testClassesWithGenericsAsReturnValueWrapperDefault() { try { ProxyAspect aspect = new ProxyAspect(DelegateAdvice.class, new AllMethodsPointcut()); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspects(aspect); WrapperProxettaFactory builder = proxetta.proxy().setTarget(Foo.class).setTargetInterface(IFoo.class); builder.newInstance(); } catch (Exception ex) { ex.printStackTrace(); fail(ex.toString()); } }
WrapperProxettaFactory builder = proxetta.proxy().setTarget(calc.getClass()); Class calc2Class = builder.define(); assertEquals(1, calc2Class.getInterfaces().length); builder.injectTargetIntoWrapper(calc, object);
@Test void testWrapperProxetta_unopen() throws InvocationTargetException, IllegalAccessException { ProxyAspect proxyAspect = ProxyAspect.of(LogProxyAdvice.class, MethodWithAnnotationPointcut.of(Transaction.class)); final Object service = Proxetta.wrapperProxetta() .withAspect(proxyAspect) .setCreateTargetInDefaultCtor(true) .proxy() .setTarget(Test568Service.class) .newInstance(); // no need to inject since setCreateTargetInstanceInDefaultCtor is set // ProxettaUtil.injectTargetIntoWrapper(new Test568Service(), service); Method method = jodd.util.ClassUtil.findMethod(service.getClass(), "findMember"); String result = (String) method.invoke(service, Long.valueOf(1)); assertEquals("1", result); }
/** * {@inheritDoc} */ @Override protected WorkData process(final ClassReader cr, final TargetClassInfoReader targetClassInfoReader) { final ProxettaWrapperClassBuilder pcb = new ProxettaWrapperClassBuilder( targetClassOrInterface, targetInterface, targetFieldName, destClassWriter, proxetta.getAspects(new ProxyAspect[0]), resolveClassNameSuffix(), requestedProxyClassName, targetClassInfoReader, createTargetInDefaultCtor ); cr.accept(pcb, 0); return pcb.getWorkData(); }
WrapperProxettaFactory builder = proxetta.proxy().setTarget(CalcSuper.class); Class<CalcSuper> calc2Class = builder.define(); builder.injectTargetIntoWrapper(calc, calc2);
@Test void testMethodAnnotationsWrapper() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { WrapperProxetta proxetta = Proxetta .wrapperProxetta() .withAspect( new ProxyAspect(HeroProxyAdvice.class, ((ProxyPointcut) MethodInfo::isTopLevelMethod).and(AllRealMethodsPointcut.get()) )) //.setDebugFolder("/Users/igor/") ; WrapperProxettaFactory proxettaBuilder = proxetta.proxy(); proxettaBuilder.setTarget(Hero.class); proxetta.setVariableClassName(true); Object hero = proxettaBuilder.newInstance(); Method nameMethod = hero.getClass().getMethod("name"); assertEquals("BatmanHero37W88.3CatWoman99speeeeedXRAYnull", nameMethod.invoke(hero)); }
/** * {@inheritDoc} */ @Override protected WorkData process(final ClassReader cr, final TargetClassInfoReader targetClassInfoReader) { final ProxettaWrapperClassBuilder pcb = new ProxettaWrapperClassBuilder( targetClassOrInterface, targetInterface, targetFieldName, destClassWriter, proxetta.getAspects(new ProxyAspect[0]), resolveClassNameSuffix(), requestedProxyClassName, targetClassInfoReader, createTargetInDefaultCtor ); cr.accept(pcb, 0); return pcb.getWorkData(); }
@Test void testClassWrapperCastToInterface() throws Exception { Calc calc = new CalcImpl(); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspect(new ProxyAspect(StatCounterAdvice.class, methodInfo -> !methodInfo.isRootMethod() && methodInfo.isPublicMethod())); //proxetta.setDebugFolder("/Users/igor"); // wrapper over CLASS casted to interface, // resulting object has ONE interface // ALL target methods are wrapped WrapperProxettaFactory builder = proxetta.proxy().setTarget(calc.getClass()).setTargetInterface(Calc.class).setTargetProxyClassName(".CalcImpl2"); Class<Calc> calc2Class = builder.define(); Calc calc2 = calc2Class.newInstance(); builder.injectTargetIntoWrapper(calc, calc2); assertEquals(1, StatCounter.counter); // counter in static block !!! calc2.hello(); assertEquals(2, StatCounter.counter); assertEquals(10, calc2.calculate(3, 7)); assertEquals(3, StatCounter.counter); assertNotNull(calc2Class.getMethod("customMethod")); }
@Test void testClassesWithGenericsAsReturnValueWrapper() { try { ProxyAspect aspect = new ProxyAspect(DelegateAdvice.class, new AllMethodsPointcut()); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspects(aspect); WrapperProxettaFactory builder = proxetta.proxy().setTarget(Foo.class).setTargetInterface(IFoo.class); builder.newInstance(); } catch (Exception ex) { fail(ex.toString()); } }
@Test void testClassAnnotationsWrapper() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { WrapperProxetta proxetta = Proxetta .wrapperProxetta() .withAspects( new ProxyAspect(HeroProxyAdvice2.class, ((ProxyPointcut) MethodInfo::isTopLevelMethod).and(AllRealMethodsPointcut.get()) )) //.setDebugFolder("/Users/igor/") ; WrapperProxettaFactory proxettaBuilder = proxetta.proxy(); proxettaBuilder.setTarget(Hero.class); proxetta.setVariableClassName(true); Object hero = proxettaBuilder.newInstance(); Method nameMethod = hero.getClass().getMethod("name"); assertEquals("SilverHero89W99.222None1000speeeeedXRAYnull", nameMethod.invoke(hero)); }
@Override public WrapperProxettaFactory proxy() { return new WrapperProxettaFactory(this); }
@Test void testInterfaceWrapper() throws Exception { Calc calc = new CalcImpl(); WrapperProxetta proxetta = Proxetta.wrapperProxetta().withAspect(new ProxyAspect(StatCounterAdvice.class, methodInfo -> methodInfo.isTopLevelMethod() && methodInfo.isPublicMethod())); //proxetta.setDebugFolder("/Users/igor"); // wrapper over INTERFACE // resulting object has ONE interface // only interface methods are wrapped WrapperProxettaFactory builder = proxetta.proxy().setTarget(Calc.class).setTargetProxyClassName(".CalcImpl3"); Class<Calc> calc2Class = builder.define(); Calc calc2 = calc2Class.newInstance(); builder.injectTargetIntoWrapper(calc, calc2); assertEquals(1, StatCounter.counter); // counter in static block !!! calc2.hello(); assertEquals(2, StatCounter.counter); assertEquals(10, calc2.calculate(3, 7)); assertEquals(3, StatCounter.counter); try { calc2Class.getMethod("customMethod"); fail("error"); } catch (Exception ex) { } }
WrapperProxettaFactory builder = proxetta.proxy().setTarget(CalcSuper.class).setTargetProxyClassName(".CalcSuper22"); Class<CalcSuper> calc2Class = builder.define(); builder.injectTargetIntoWrapper(calc, calc2);
builder.setTarget(targetClass); builder.setTargetProxyClassName(this.getClass().getPackage().getName() + '.' + targetClass.getSimpleName()); wrappedStatement = builder.define(); builder.injectTargetIntoWrapper(preparedStatement, wrapper);