Example usage for org.springframework.cglib.proxy Enhancer setCallbackFilter

List of usage examples for org.springframework.cglib.proxy Enhancer setCallbackFilter

Introduction

In this page you can find the example usage for org.springframework.cglib.proxy Enhancer setCallbackFilter.

Prototype

public void setCallbackFilter(CallbackFilter filter) 

Source Link

Document

Set the CallbackFilter used to map the generated class' methods to a particular callback index.

Usage

From source file:org.reindeer.redis.jedis.JedisFactoryBean.java

@Override
public Jedis getObject() throws Exception {
    if (jedis != null) {
        return jedis;
    }//from   w  ww  .j a va  2 s .c om
    Enhancer en = new Enhancer();
    en.setSuperclass(Jedis.class);
    en.setCallbackFilter(finalizeFilter);
    en.setCallbacks(new Callback[] { NoOp.INSTANCE, jedisCallback });
    jedis = (Jedis) en.create(new Class[] { String.class }, new Object[] { "JedisProxy" });
    return jedis;
}

From source file:org.reindeer.redis.shard.ShardedJedisFactoryBean.java

@Override
public ShardedJedis getObject() throws Exception {
    if (jedis != null) {
        return jedis;
    }/* w  ww  .j a  va 2 s  .  c om*/
    Enhancer en = new Enhancer();
    en.setSuperclass(ShardedJedis.class);
    en.setCallbackFilter(finalizeFilter);
    en.setCallbacks(new Callback[] { NoOp.INSTANCE, jedisCallback });
    jedis = (ShardedJedis) en.create(new Class[] { List.class },
            new Object[] { Arrays.asList(new JedisShardInfo("shardedJedisProxy")) });
    return jedis;
}

From source file:com.example.post.MyConfigurationClassEnhancer.java

/**
 * Creates a new CGLIB {@link Enhancer} instance.
 *//*w ww  . ja  v  a2  s. c om*/
private Enhancer newEnhancer(Class<?> superclass, ClassLoader classLoader) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(superclass);
    //enhancer.setInterfaces(new Class<?>[] {EnhancedConfiguration.class});
    enhancer.setUseFactory(false);
    enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
    //enhancer.setStrategy(new BeanFactoryAwareGeneratorStrategy(classLoader));
    enhancer.setCallbackFilter(CALLBACK_FILTER);
    enhancer.setCallbackTypes(CALLBACK_FILTER.getCallbackTypes());
    return enhancer;
}

From source file:org.springframework.aop.framework.CglibAopProxy.java

@Override
public Object getProxy(@Nullable ClassLoader classLoader) {
    if (logger.isDebugEnabled()) {
        logger.debug("Creating CGLIB proxy: target source is " + this.advised.getTargetSource());
    }//from   w w w .ja  va 2 s .  c  om

    try {
        Class<?> rootClass = this.advised.getTargetClass();
        Assert.state(rootClass != null, "Target class must be available for creating a CGLIB proxy");

        Class<?> proxySuperClass = rootClass;
        if (ClassUtils.isCglibProxyClass(rootClass)) {
            proxySuperClass = rootClass.getSuperclass();
            Class<?>[] additionalInterfaces = rootClass.getInterfaces();
            for (Class<?> additionalInterface : additionalInterfaces) {
                this.advised.addInterface(additionalInterface);
            }
        }

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

        // 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.setInterfaces(AopProxyUtils.completeProxiedInterfaces(this.advised));
        enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
        enhancer.setStrategy(new ClassLoaderAwareUndeclaredThrowableStrategy(classLoader));

        Callback[] callbacks = getCallbacks(rootClass);
        Class<?>[] types = new Class<?>[callbacks.length];
        for (int x = 0; x < types.length; x++) {
            types[x] = callbacks[x].getClass();
        }
        // fixedInterceptorMap only populated at this point, after getCallbacks call above
        enhancer.setCallbackFilter(new ProxyCallbackFilter(this.advised.getConfigurationOnlyCopy(),
                this.fixedInterceptorMap, this.fixedInterceptorOffset));
        enhancer.setCallbackTypes(types);

        // Generate the proxy class and create a proxy instance.
        return createProxyClassAndInstance(enhancer, callbacks);
    } catch (CodeGenerationException | IllegalArgumentException ex) {
        throw new AopConfigException(
                "Could not generate CGLIB subclass of class [" + this.advised.getTargetClass() + "]: "
                        + "Common causes of this problem include using a final class or a non-visible class",
                ex);
    } catch (Throwable ex) {
        // TargetSource.getTarget() failed
        throw new AopConfigException("Unexpected AOP exception", ex);
    }
}

From source file:org.springframework.context.annotation.ConfigurationClassEnhancer.java

/**
 * Creates a new CGLIB {@link Enhancer} instance.
 *//*from   ww w .  ja  v a  2  s .c  om*/
private Enhancer newEnhancer(Class<?> superclass, @Nullable ClassLoader classLoader) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(superclass);
    enhancer.setInterfaces(new Class<?>[] { EnhancedConfiguration.class });
    enhancer.setUseFactory(false);
    enhancer.setNamingPolicy(SpringNamingPolicy.INSTANCE);
    enhancer.setStrategy(new BeanFactoryAwareGeneratorStrategy(classLoader));
    enhancer.setCallbackFilter(CALLBACK_FILTER);
    enhancer.setCallbackTypes(CALLBACK_FILTER.getCallbackTypes());
    return enhancer;
}