cglib类动态代理



Enhancer enhancer = new Enhancer();

            enhancer.setSuperclass(moduleClass);

            DefaultInterceptor defaultCallback = new DefaultInterceptor();
            ModuleInterceptor  moduleCallback  = new ModuleInterceptor();

            enhancer.setCallbacks(new Callback[] { defaultCallback, moduleCallback });
            enhancer.setCallbackFilter(moduleCallback);

            module = (Module) enhancer.create();





  /**
     * 默认拦截器。
     */
    private class DefaultInterceptor implements MethodInterceptor {
        public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
                throws Throwable {
            return proxy.invokeSuper(obj, args);
        }
    }

    /**
     * Module拦截器。
     */
    private class ModuleInterceptor implements MethodInterceptor, CallbackFilter {
        public int accept(Method method) {
            if (Modifier.isAbstract(method.getModifiers()) && method.getName().startsWith("get")
                        && (method.getName().length() > "get".length())
                        && (method.getParameterTypes().length == 0)
                        && !method.getReturnType().equals(Void.TYPE)) {
                return 1;
            }

            return 0;
        }

        public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy)
                throws Throwable {
            Object returnValue = null;
            String methodName  = method.getName();
            Class  returnType  = method.getReturnType();
            String objectName  = methodName.substring("get".length());

            if (Character.isUpperCase(objectName.charAt(0))) {
                objectName = Character.toLowerCase(objectName.charAt(0)) + objectName.substring(1);
            }

            returnValue = resolver.getObject(objectName, returnType);

            return returnValue;
        }
    }



你可能感兴趣的:(cglib)