No Cglib示例:
package com.cglibjava.nocglib; public class InfoManager { public void query() { System.out.println("query"); } }
package com.cglibjava.nocglib; public class InfoManagerFactory { private static InfoManager manger = new InfoManager(); public static InfoManager getInstance() { return manger; } }
package com.cglibjava.nocglib; public class ClientTest { public static void main(String[] args) { ClientTest c = new ClientTest(); c.anyonecanManager(); } public void anyonecanManager() { InfoManager manager = InfoManagerFactory.getInstance(); doCRUD(manager); } private void doCRUD(InfoManager manager) { manager.query(); } }
Cglib 示例:
依赖pom
<dependency> <groupId>cglib</groupId> <artifactId>cglib-full</artifactId> <version>2.0.2</version> </dependency>
package com.cglibjava.cglib; public class InfoManager { public void query() { System.out.println("query"); } }
package com.cglibjava.cglib; import net.sf.cglib.proxy.Callback; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.NoOp; public class InfoManagerFactory { public static InfoManager getSelectivityAuthInstance(AuthProxy auth) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(InfoManager.class); enhancer.setCallbacks(new Callback[] { auth, NoOp.INSTANCE }); enhancer.setCallbackFilter(new AuthProxyFilter()); return (InfoManager) enhancer.create(); } }
package com.cglibjava.cglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class AuthProxy implements MethodInterceptor { private String name; public AuthProxy(String name) { this.name = name; } public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { if (!"maurice".equals(this.name)) { System.out.println("AuthProxy:you have no permits to do manager!"); return null; } return proxy.invokeSuper(obj, args); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package com.cglibjava.cglib; import java.lang.reflect.Method; import net.sf.cglib.proxy.CallbackFilter; public class AuthProxyFilter implements CallbackFilter { private static final int AUTH_NEED = 0; private static final int AUTH_NOT_NEED = 1; public int accept(Method method) { if ("query".equals(method.getName())) { return AUTH_NOT_NEED; } return AUTH_NEED; } }
package com.cglibjava.cglib; public class ClientTest { public static void main(String[] args) { ClientTest c = new ClientTest(); c.selectivityAuthManager(); } public void selectivityAuthManager() { System.out.println("the loginer's name is not maurice,so have no permits do manager except do query operator"); InfoManager authManager = InfoManagerFactory.getSelectivityAuthInstance(new AuthProxy("maurice1")); doCRUD(authManager); separatorLine(); } private void doCRUD(InfoManager manager) { manager.query(); } private void separatorLine() { System.out.println("################################"); } }