ConfigurationClassEnhancer.java 文件源码

java
阅读 24 收藏 0 点赞 0 评论 0

项目:lams 作者:
/**
 * Create a subclass proxy that intercepts calls to getObject(), delegating to the current BeanFactory
 * instead of creating a new instance. These proxies are created only when calling a FactoryBean from
 * 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, 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();
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号