Package org.springframework.cglib.proxy

Examples of org.springframework.cglib.proxy.Enhancer


     * @param args arguments to use for the constructor.
     * Ignored if the ctor parameter is <code>null</code>.
     * @return new instance of the dynamically generated class
     */
    public Object instantiate(Constructor ctor, Object[] args) {
      Enhancer enhancer = new Enhancer();
      enhancer.setSuperclass(this.beanDefinition.getBeanClass());
      enhancer.setCallbackFilter(new CallbackFilterImpl());
      enhancer.setCallbacks(new Callback[] {
          NoOp.INSTANCE,
          new LookupOverrideMethodInterceptor(),
          new ReplaceOverrideMethodInterceptor()
      });

      return (ctor == null) ?
          enhancer.create() :
          enhancer.create(ctor.getParameterTypes(), args);
    }
View Full Code Here


  /**
   * Creates a new CGLIB {@link Enhancer} instance.
   */
  private Enhancer newEnhancer(Class<?> superclass) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(superclass);
    enhancer.setInterfaces(new Class[] {EnhancedConfiguration.class});
    enhancer.setUseFactory(false);
    enhancer.setCallbackFilter(CALLBACK_FILTER);
    enhancer.setCallbackTypes(CALLBACK_TYPES);
    return enhancer;
  }
View Full Code Here

     * within a Bean method, allowing for proper scoping semantics even when working against the FactoryBean
     * instance directly. If a FactoryBean instance is fetched through the container via &-dereferencing,
     * it will not be proxied. This too is aligned with the way XML configuration works.
     */
    private Object enhanceFactoryBean(Class<?> fbClass, String beanName) throws InstantiationException, IllegalAccessException {
      Enhancer enhancer = new Enhancer();
      enhancer.setSuperclass(fbClass);
      enhancer.setUseFactory(false);
      enhancer.setCallbackFilter(CALLBACK_FITLER);
      // Callback instances must be ordered in the same way as CALLBACK_TYPES and CALLBACK_FILTER
      Callback[] callbackInstances = new Callback[] {
          new GetObjectMethodInterceptor(this.beanFactory, beanName),
          NoOp.INSTANCE
      };

      enhancer.setCallbackTypes(CALLBACK_TYPES);
      Class<?> fbSubclass = enhancer.createClass();
      Enhancer.registerCallbacks(fbSubclass, callbackInstances);
      return fbSubclass.newInstance();
    }
View Full Code Here

      // Validate the class, writing log messages as necessary.
      validateClassIfNecessary(proxySuperClass);

      // Configure CGLIB Enhancer...
      Enhancer enhancer = createEnhancer();
      if (classLoader != null) {
        enhancer.setClassLoader(classLoader);
        if (classLoader instanceof SmartClassLoader &&
            ((SmartClassLoader) classLoader).isClassReloadable(proxySuperClass)) {
          enhancer.setUseCache(false);
        }
      }
      enhancer.setSuperclass(proxySuperClass);
      enhancer.setStrategy(new UndeclaredThrowableStrategy(UndeclaredThrowableException.class));
      enhancer.setInterfaces(AopProxyUtils.completeProxiedInterfaces(this.advised));
      enhancer.setInterceptDuringConstruction(false);

      Callback[] callbacks = getCallbacks(rootClass);
      enhancer.setCallbacks(callbacks);
      enhancer.setCallbackFilter(new ProxyCallbackFilter(
          this.advised.getConfigurationOnlyCopy(), this.fixedInterceptorMap, this.fixedInterceptorOffset));

      Class<?>[] types = new Class[callbacks.length];
      for (int x = 0; x < types.length; x++) {
        types[x] = callbacks[x].getClass();
      }
      enhancer.setCallbackTypes(types);

      // Generate the proxy class and create a proxy instance.
      Object proxy;
      if (this.constructorArgs != null) {
        proxy = enhancer.create(this.constructorArgTypes, this.constructorArgs);
      }
      else {
        proxy = enhancer.create();
      }

      return proxy;
    }
    catch (CodeGenerationException ex) {
View Full Code Here

  /**
   * Creates the CGLIB {@link Enhancer}. Subclasses may wish to override this to return a custom
   * {@link Enhancer} implementation.
   */
  protected Enhancer createEnhancer() {
    return new Enhancer();
  }
View Full Code Here

            factory.addInterface(type);
            factory.addInterface(MethodInvocationInfo.class);
            factory.addAdvice(interceptor);
            return (T) factory.getProxy();
        } else {
            Enhancer enhancer = new Enhancer();
            enhancer.setSuperclass(type);
            enhancer.setInterfaces(new Class<?>[]{MethodInvocationInfo.class});
            enhancer.setCallbackType(org.springframework.cglib.proxy.MethodInterceptor.class);

            Factory factory = (Factory) objenesis.newInstance(enhancer.createClass());
            factory.setCallbacks(new Callback[]{interceptor});
            return (T) factory;
        }
    }
View Full Code Here

      factory.addAdvice(interceptor);

      return (T) factory.getProxy();
    }

    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(type);
    enhancer.setInterfaces(new Class<?>[] { LastInvocationAware.class });
    enhancer.setCallbackType(org.springframework.cglib.proxy.MethodInterceptor.class);
    enhancer.setClassLoader(classLoader);

    Factory factory = (Factory) OBJENESIS.newInstance(enhancer.createClass());
    factory.setCallbacks(new Callback[] { interceptor });
    return (T) factory;
  }
View Full Code Here

      factory.addInterface(MethodInvocationInfo.class);
      factory.addAdvice(interceptor);
      return (T) factory.getProxy();
    }
    else {
      Enhancer enhancer = new Enhancer();
      enhancer.setSuperclass(type);
      enhancer.setInterfaces(new Class<?>[] {MethodInvocationInfo.class});
      enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
      enhancer.setCallbackType(org.springframework.cglib.proxy.MethodInterceptor.class);
      Factory factory = (Factory) objenesis.newInstance(enhancer.createClass());
      factory.setCallbacks(new Callback[] {interceptor});
      return (T) factory;
    }
  }
View Full Code Here

  /**
   * Creates a new CGLIB {@link Enhancer} instance.
   */
  private Enhancer newEnhancer(Class<?> superclass) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(superclass);
    enhancer.setInterfaces(new Class<?>[] {EnhancedConfiguration.class});
    enhancer.setUseFactory(false);
    enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
    enhancer.setStrategy(GENERATOR_STRATEGY);
    enhancer.setCallbackFilter(CALLBACK_FILTER);
    enhancer.setCallbackTypes(CALLBACK_FILTER.getCallbackTypes());
    return enhancer;
  }
View Full Code Here

     * it will not be proxied. This too is aligned with the way XML configuration works.
     */
    private Object enhanceFactoryBean(Class<?> fbClass, final ConfigurableBeanFactory beanFactory,
        final String beanName) throws InstantiationException, IllegalAccessException {

      Enhancer enhancer = new Enhancer();
      enhancer.setSuperclass(fbClass);
      enhancer.setUseFactory(false);
      enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
      enhancer.setCallback(new MethodInterceptor() {
        @Override
        public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
          if (method.getName().equals("getObject") && args.length == 0) {
            return beanFactory.getBean(beanName);
          }
          return proxy.invokeSuper(obj, args);
        }
      });
      return enhancer.create();
    }
View Full Code Here

TOP

Related Classes of org.springframework.cglib.proxy.Enhancer

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.