{"id":1414,"date":"2022-11-02T23:04:48","date_gmt":"2022-11-02T15:04:48","guid":{"rendered":"https:\/\/qaqaq.top\/?p=1414"},"modified":"2022-11-27T12:39:45","modified_gmt":"2022-11-27T04:39:45","slug":"%e4%bb%a3%e7%90%86%e6%a8%a1%e5%bc%8f%e4%b8%8e%e5%8a%a8%e6%80%81%e4%bb%a3%e7%90%86%e3%80%81%e5%8a%a8%e6%80%81%e4%bb%a3%e7%90%86%e4%b8%be%e4%be%8b","status":"publish","type":"post","link":"https:\/\/qaqaq.top\/?p=1414","title":{"rendered":"\u4ee3\u7406\u6a21\u5f0f\u4e0e\u52a8\u6001\u4ee3\u7406\u3001\u52a8\u6001\u4ee3\u7406\u4e3e\u4f8b\u3001AOP\u4e0e\u52a8\u6001\u4ee3\u7406\u7684\u4e3e\u4f8b"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>package top.qaqaq.java.P663;\r\n\r\n\/**\r\n * \u9759\u6001\u4ee3\u7406\u4e3e\u4f8b\r\n *\r\n * \u7279\u70b9\uff1a\u4ee3\u7406\u7c7b\u548c\u88ab\u4ee3\u7406\u7c7b\u5728\u7f16\u8bd1\u671f\u95f4\uff0c\u5c31\u786e\u5b9a\u4e0b\u6765\u4e86\u3002\r\n *\r\n * @author RichieZhang\r\n * @create 2022-11-02 \u4e0b\u5348 10:02\r\n *\/\r\ninterface ClothFactory{\r\n\r\n    void produceCloth();\r\n}\r\n\r\n\/\/\u4ee3\u7406\u7c7b\r\nclass ProxyClothFactory implements ClothFactory{\r\n\r\n    private ClothFactory factory;\/\/\u7528\u88ab\u4ee3\u7406\u7c7b\u5bf9\u8c61\u8fdb\u884c\u5b9e\u4f8b\u5316\r\n\r\n    public ProxyClothFactory(ClothFactory factory){\r\n         this.factory = factory;\r\n    }\r\n\r\n    @Override\r\n    public void produceCloth() {\r\n        System.out.println(\"\u4ee3\u7406\u5de5\u5382\u505a\u4e00\u4e9b\u51c6\u5907\u5de5\u4f5c\");\r\n\r\n        factory.produceCloth();\r\n\r\n        System.out.println(\"\u4ee3\u7406\u5de5\u5382\u505a\u4e00\u4e9b\u540e\u7eed\u7684\u6536\u5c3e\u5de5\u4f5c\");\r\n    }\r\n}\r\n\r\n\/\/\u88ab\u4ee3\u7406\u7c7b\r\nclass NikeClothFactory implements ClothFactory{\r\n\r\n    @Override\r\n    public void produceCloth() {\r\n        System.out.println(\"Nike\u5de5\u5382\u751f\u4ea7\u4e00\u6279\u8fd0\u52a8\u670d\");\r\n    }\r\n}\r\n\r\npublic class StaticProxyTest {\r\n    public static void main(String&#91;] args) {\r\n        \/\/\u521b\u5efa\u88ab\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\r\n        ClothFactory nike = new NikeClothFactory();\r\n\r\n        \/\/\u521b\u5efa\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\r\n        ClothFactory proxyClothFactory = new ProxyClothFactory(nike);\r\n\r\n        proxyClothFactory.produceCloth();\r\n\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>package top.qaqaq.java.P663;\r\n\r\nimport java.lang.reflect.InvocationHandler;\r\nimport java.lang.reflect.Method;\r\nimport java.lang.reflect.Proxy;\r\n\r\n\/**\r\n *\r\n * \u52a8\u6001\u4ee3\u7406\u7684\u4e3e\u4f8b\r\n *\r\n * @author RichieZhang\r\n * @create 2022-11-02 \u4e0b\u5348 10:15\r\n *\/\r\n\r\ninterface Human{\r\n\r\n    String getBelief();\r\n\r\n    void eat(String food);\r\n\r\n}\r\n\r\n\/\/\u88ab\u4ee3\u7406\u7c7b\r\nclass SuperMan implements Human{\r\n\r\n    @Override\r\n    public String getBelief() {\r\n        return \"I believe I can fly!\";\r\n    }\r\n\r\n    @Override\r\n    public void eat(String food) {\r\n        System.out.println(\"\u6211\u559c\u6b22\u5403\" + food);\r\n    }\r\n}\r\n\r\nclass HumanUtil{\r\n\r\n    public void method1(){\r\n        System.out.println(\"==========================\u901a\u7528\u65b9\u6cd5\u4e00=========================\");\r\n    }\r\n\r\n    public void method2(){\r\n        System.out.println(\"==========================\u901a\u7528\u65b9\u6cd5\u4e8c=========================\");\r\n    }\r\n}\r\n\r\n\/*\r\n\u8981\u60f3\u5b9e\u73b0\u52a8\u6001\u4ee3\u7406\uff0c\u9700\u8981\u89e3\u51b3\u7684\u95ee\u9898\uff1f\r\n\u95ee\u9898\u4e00\uff1a\u5982\u4f55\u6839\u636e\u52a0\u8f7d\u5230\u5185\u5b58\u4e2d\u7684\u88ab\u4ee3\u7406\u7c7b\uff0c\u52a8\u6001\u7684\u521b\u5efa\u4e00\u4e2a\u4ee3\u7406\u7c7b\u53ca\u5176\u5bf9\u8c61\r\n\u95ee\u9898\u4e8c\uff1a\u5f53\u901a\u8fc7\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\u8c03\u7528\u65b9\u6cd5\u65f6\uff0c\u5982\u4f55\u52a8\u6001\u7684\u53bb\u8c03\u7528\u88ab\u4ee3\u7406\u7c7b\u4e2d\u7684\u540c\u540d\u65b9\u6cd5\u3002\r\n\r\n\r\n *\/\r\nclass ProxyFactory{\r\n\r\n    \/\/\u8c03\u7528\u6b64\u65b9\u6cd5\uff0c\u8fd4\u56de\u4e00\u4e2a\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\u3002\u89e3\u51b3\u95ee\u9898\u4e00\r\n    public static Object getProxyInstance(Object obj){\/\/obj:\u88ab\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\r\n        MyInvocationHandler handler = new MyInvocationHandler();\r\n\r\n        handler.bind(obj);\r\n\r\n        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);\r\n    }\r\n}\r\n\r\nclass MyInvocationHandler implements InvocationHandler{\r\n\r\n    private Object obj;\/\/\u9700\u8981\u4f7f\u7528\u88ab\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\u8fdb\u884c\u8d4b\u503c\r\n\r\n    public void bind(Object obj){\r\n        this.obj = obj;\r\n    }\r\n\r\n    \/\/\u5f53\u6211\u4eec\u901a\u8fc7\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\uff0c\u8c03\u7528\u65b9\u6cd5a\u65f6\uff0c\u5c31\u4f1a\u81ea\u52a8\u7684\u8c03\u7528\u5982\u4e0b\u7684\u65b9\u6cd5\uff1ainvoke()\r\n    \/\/\u5c06\u88ab\u4ee3\u7406\u7c7b\u8981\u6267\u884c\u7684\u65b9\u6cd5a\u7684\u529f\u80fd\u5c31\u58f0\u660e\u5728invoke()\u4e2d\r\n    @Override\r\n    public Object invoke(Object proxy, Method method, Object&#91;] args) throws Throwable {\r\n\r\n        HumanUtil util = new HumanUtil();\r\n        util.method1();\r\n\r\n        \/\/method: \u5373\u4e3a\u4ee3\u7406\u7c7b\u5bf9\u8c61\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u6b64\u65b9\u6cd5\u4e5f\u5c31\u4f5c\u4e3a\u4e86\u88ab\u4ee3\u7406\u7c7b\u5bf9\u8c61\u8981\u8c03\u7528\u7684\u65b9\u6cd5\r\n        \/\/obj: \u88ab\u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\r\n        Object returnValue = method.invoke(obj,args);\r\n        \/\/\u4e0a\u8ff0\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u5c31\u4f5c\u4e3a\u5f53\u524d\u7c7b\u4e2d\u7684invoke()\u7684\u8fd4\u56de\u503c\u3002\r\n\r\n        util.method2();\r\n\r\n        return returnValue;\r\n    }\r\n}\r\n\r\npublic class ProxyTest {\r\n\r\n    public static void main(String&#91;] args) {\r\n        SuperMan superMan = new SuperMan();\r\n        \/\/proxyInstance: \u4ee3\u7406\u7c7b\u7684\u5bf9\u8c61\r\n        Human proxyInstance = (Human) ProxyFactory.getProxyInstance(superMan);\r\n        \/\/\u5f53\u901a\u8fc7\u4ee3\u7406\u7c7b\u5bf9\u8c61\u8c03\u7528\u65b9\u6cd5\u65f6\uff0c\u4f1a\u81ea\u52a8\u7684\u8c03\u7528\u88ab\u4ee3\u7406\u7c7b\u4e2d\u540c\u540d\u7684\u65b9\u6cd5\r\n        String belief = proxyInstance.getBelief();\r\n        System.out.println(belief);\r\n        proxyInstance.eat(\"\u56db\u5ddd\u9ebb\u8fa3\u70eb\");\r\n\r\n        System.out.println(\"********************************************\");\r\n\r\n        NikeClothFactory nikeClothFactory = new NikeClothFactory();\r\n\r\n        ClothFactory proxyClothFactory = (ClothFactory) ProxyFactory.getProxyInstance(nikeClothFactory);\r\n\r\n        proxyClothFactory.produceCloth();\r\n    }\r\n}\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[46],"class_list":["post-1414","post","type-post","status-publish","format-standard","hentry","category-java-code","tag-java"],"_links":{"self":[{"href":"https:\/\/qaqaq.top\/index.php?rest_route=\/wp\/v2\/posts\/1414"}],"collection":[{"href":"https:\/\/qaqaq.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/qaqaq.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/qaqaq.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/qaqaq.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1414"}],"version-history":[{"count":2,"href":"https:\/\/qaqaq.top\/index.php?rest_route=\/wp\/v2\/posts\/1414\/revisions"}],"predecessor-version":[{"id":1421,"href":"https:\/\/qaqaq.top\/index.php?rest_route=\/wp\/v2\/posts\/1414\/revisions\/1421"}],"wp:attachment":[{"href":"https:\/\/qaqaq.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1414"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/qaqaq.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1414"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/qaqaq.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1414"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}