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;
}
}
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;
}
}