栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java动态代理与cglib动态代理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java动态代理与cglib动态代理

java动态代理与cglib动态代理

public interface Subject  {

        String sayHelloWorld(String name,Subject subject);

        Subject sayBye();

         void haha();
}
public class RealSubject implements Subject{

        private String stest;

        public String getStest() {
                return stest;
        }

        public void setStest(String stest) {
                this.stest = stest;
        }

        @Override
        @NotNull
        public String sayHelloWorld(String name,Subject subject) {
                return "hello"+name;
        }

        @Override
        public Subject sayBye() {
                RealSubject subject= new RealSubject();
                subject.setStest("good job!");
                System.out.println("good Job!");
                return subject;
        }

        public void haha(){
                System.out.println("测试************");
        }
}
public class ProxyMain {
        public static void main(String[] args) {
                
                Subject subject = (Subject) jdkProxy();
                subject.sayBye();
                
                Subject subject1 = (Subject) cglibProxy();
                subject1.sayBye();
        }

        
        public static Object jdkProxy() {
                
                Subject subject = new RealSubject();
                
                Class[] interfaces = subject.getClass().getInterfaces();
                return Proxy.newProxyInstance(subject.getClass().getClassLoader(), interfaces, (proxy, method, args) -> {
                        System.out.println("调用之前");
                        System.out.println(method.getName());
                        switch (method.getName()) {
                                case "SayHelloWorld":
                                        return "" + method.invoke(subject, args);
                                case "sayBye":
                                        Object object = method.invoke(subject, args);
                                        return object;
                                case "haha":
                                        return null;
                                default:
                                        return new Object();
                        }
                });
        }

        
        public static Object cglibProxy() {
                
                Subject subject = new RealSubject();
                
                Enhancer enhancer = new Enhancer();
                
                enhancer.setSuperclass(subject.getClass());
                
                MethodInterceptor methodInterceptor = (proxy, method, obj, methodProxy) -> {
                        System.out.println("调用之前");
                        System.out.println("Method" + method);
                        switch (method.getName()) {
                                case "sayHelloWorld":
                                        String string = (String) methodProxy.invoke(subject, obj);
                                        return "" + string;
                                case "sayBye":
                                        Object object = methodProxy.invoke(subject, obj);
                                        return object;
                                case "haha":
                                        return null;
                                default:
                                        return new Object();
                        }
                };
                
                enhancer.setCallback(methodInterceptor);
                
                return enhancer.create();
        }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732050.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号