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("################################");
}
}