Java 动态代理和Cglib代理(二)

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

}

猜你喜欢

转载自pluto418.iteye.com/blog/1692218
今日推荐