代理模式--动态代理 cglic

来源:互联网 发布:语音朗读软件 编辑:程序博客网 时间:2024/06/07 14:37
package com.gqc.factory;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;import com.gqc.service.SomeService;public class MyCglibFactory implements MethodInterceptor {private SomeService target;public MyCglibFactory() {target = new SomeService();}public SomeService myCglibCreator(){//创建增强器对象Enhancer enhancer=new Enhancer();//指定目标类,即父类 (因为cglib是通过创建子类来增强父类的)enhancer.setSuperclass(SomeService.class);//设置回掉接口对象enhancer.setCallback(this);return (SomeService) enhancer.create();}//回调方法@Overridepublic Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable {//调用目标方法Object result = method.invoke(target, args);if (result!=null) {result = ((String) result).toUpperCase();}return result;}}


package com.gqc.service;//目标类public class SomeService {public String dofirst() {System.out.println("执行dofirst");return "abcde";}public void doSecond() {System.out.println("执行doSecond");}}

package com.gqc.test;import com.gqc.factory.MyCglibFactory;import com.gqc.service.SomeService;public class MyTest {public static void main(String[] args) {SomeService service=new MyCglibFactory().myCglibCreator();String result = service.dofirst();System.out.println("result="+result);service.doSecond();}}


原创粉丝点击