{"rsdb":{"rid":"286939","subhead":"","postdate":"0","aid":"203447","fid":"76","uid":"1","topic":"1","content":"
\n
\n \u539f\u6587\u51fa\u5904\uff1a \n \u6211\u53eb\u5218\u534a\u4ed9<\/a>\n <\/div> \n

\u4e3a\u4ec0\u4e48\u4f1a\u6709\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff08AOP\uff09\uff1f\u6211\u4eec\u77e5\u9053Java\u662f\u4e00\u4e2a\u9762\u5411\u5bf9\u8c61\uff08OOP\uff09\u7684\u8bed\u8a00\uff0c\u4f46\u5b83\u6709\u4e00\u4e9b\u5f0a\u7aef\uff0c\u6bd4\u5982\u5f53\u6211\u4eec\u9700\u8981\u4e3a\u591a\u4e2a\u4e0d\u5177\u6709\u7ee7\u627f\u5173\u7cfb\u7684\u5bf9\u8c61\u5f15\u5165\u4e00\u4e2a\u516c\u5171\u884c\u4e3a\uff0c\u4f8b\u5982\u65e5\u5fd7\u3001\u6743\u9650\u9a8c\u8bc1\u3001\u4e8b\u52a1\u7b49\u529f\u80fd\u65f6\uff0c\u53ea\u80fd\u5728\u5728\u6bcf\u4e2a\u5bf9\u8c61\u91cc\u5f15\u7528\u516c\u5171\u884c\u4e3a\u3002\u8fd9\u6837\u505a\u4e0d\u4fbf\u4e8e\u7ef4\u62a4\uff0c\u800c\u4e14\u6709\u5927\u91cf\u91cd\u590d\u4ee3\u7801\u3002AOP\u7684\u51fa\u73b0\u5f25\u8865\u4e86OOP\u7684\u8fd9\u70b9\u4e0d\u8db3\u3002<\/span><\/p> \n

\u4e3a\u4e86\u9610\u8ff0\u6e05\u695aSpring AOP\uff0c\u6211\u4eec\u4ece\u5c06\u4ee5\u4e0b\u65b9\u9762\u8fdb\u884c\u8ba8\u8bba\uff1a<\/p> \n

    \n
  1. \u4ee3\u7406\u6a21\u5f0f<\/li> \n
  2. \u9759\u6001\u4ee3\u7406\u539f\u7406\u53ca\u5b9e\u8df5<\/li> \n
  3. \u52a8\u6001\u4ee3\u7406\u539f\u7406\u53ca\u5b9e\u8df5<\/li> \n
  4. Spring AOP\u539f\u7406\u53ca\u5b9e\u6218<\/li> \n <\/ol> \n

    1. \u4ee3\u7406\u6a21\u5f0f<\/h3> \n

    \u4ee3\u7406\u6a21\u5f0f\uff1a\u4e3a\u5176\u4ed6\u5bf9\u8c61\u63d0\u4f9b\u4e00\u79cd\u4ee3\u7406\u4ee5\u63a7\u5236\u5bf9\u8fd9\u4e2a\u5bf9\u8c61\u7684\u8bbf\u95ee\u3002\u8fd9\u6bb5\u8bdd\u6bd4\u8f83\u5b98\u65b9\uff0c\u4f46\u6211\u66f4\u503e\u5411\u4e8e\u7528\u81ea\u5df1\u7684\u8bed\u8a00\u7406\u89e3\uff1a\u6bd4\u5982A\u5bf9\u8c61\u8981\u505a\u4e00\u4ef6\u4e8b\u60c5\uff0c\u5728\u6ca1\u6709\u4ee3\u7406\u524d\uff0c\u81ea\u5df1\u6765\u505a\uff1b\u5728\u5bf9 A \u4ee3\u7406\u540e\uff0c\u7531 A \u7684\u4ee3\u7406\u7c7b B \u6765\u505a\u3002\u4ee3\u7406\u5176\u5b9e\u662f\u5728\u539f\u5b9e\u4f8b\u524d\u540e\u52a0\u4e86\u4e00\u5c42\u5904\u7406\uff0c\u8fd9\u4e5f\u662f AOP \u7684\u521d\u7ea7\u8f6e\u5ed3\u3002<\/p> \n

    2. \u9759\u6001\u4ee3\u7406\u539f\u7406\u53ca\u5b9e\u8df5<\/h3> \n

    \u9759\u6001\u4ee3\u7406\u6a21\u5f0f\uff1a\u9759\u6001\u4ee3\u7406\u8bf4\u767d\u4e86\uff0c\u5c31\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u524d\u5c31\u5df2\u7ecf\u5b58\u5728\u4ee3\u7406\u7c7b\u7684\u5b57\u8282\u7801\u6587\u4ef6\u3001\u4ee3\u7406\u7c7b\u548c\u539f\u59cb\u7c7b\u7684\u5173\u7cfb\u5728\u8fd0\u884c\u524d\u5c31\u5df2\u7ecf\u786e\u5b9a\u3002\u5e9f\u8bdd\u4e0d\u591a\u8bf4\uff0c\u6211\u4eec\u770b\u4e00\u4e0b\u4ee3\u7801\u3002\u4e3a\u4e86\u65b9\u4fbf\u9605\u8bfb\uff0c\u535a\u4e3b\u628a\u5355\u72ec\u7684 class \u6587\u4ef6\u5408\u5e76\u5230\u63a5\u53e3\u4e2d\uff0c\u8bfb\u8005\u53ef\u4ee5\u76f4\u63a5\u590d\u5236\u4ee3\u7801\u8fd0\u884c\uff1a<\/p> \n

    package test.staticProxy;\r\n\r\n\/\/ \u63a5\u53e3\r\npublic interface IUserDao {\r\n    void save();\r\n    void find();\r\n}\r\n\r\n\/\/\u76ee\u6807\u5bf9\u8c61\r\nclass UserDao implements IUserDao{\r\n    @Override\r\n    public void save() {\r\n        System.out.println("\u6a21\u62df\uff1a\u4fdd\u5b58\u7528\u6237\uff01");\r\n    }\r\n    @Override\r\n    public void find() {\r\n        System.out.println("\u6a21\u62df\uff1a\u67e5\u8be2\u7528\u6237");\r\n    }\r\n}\r\n\r\n\/**\r\n  * \u9759\u6001\u4ee3\u7406\r\n  * \u7279\u70b9\uff1a\r\n  * 2. \u76ee\u6807\u5bf9\u8c61\u5fc5\u987b\u8981\u5b9e\u73b0\u63a5\u53e3\r\n  * 2. \u4ee3\u7406\u5bf9\u8c61\uff0c\u8981\u5b9e\u73b0\u4e0e\u76ee\u6807\u5bf9\u8c61\u4e00\u6837\u7684\u63a5\u53e3\r\n *\/\r\nclass UserDaoProxy implements IUserDao{\r\n\r\n    \/\/ \u4ee3\u7406\u5bf9\u8c61\uff0c\u9700\u8981\u7ef4\u62a4\u4e00\u4e2a\u76ee\u6807\u5bf9\u8c61\r\n    private IUserDao target = new UserDao();\r\n\r\n    @Override\r\n    public void save() {\r\n        System.out.println("\u4ee3\u7406\u64cd\u4f5c\uff1a \u5f00\u542f\u4e8b\u52a1...");\r\n        target.save();   \/\/ \u6267\u884c\u76ee\u6807\u5bf9\u8c61\u7684\u65b9\u6cd5\r\n        System.out.println("\u4ee3\u7406\u64cd\u4f5c\uff1a\u63d0\u4ea4\u4e8b\u52a1...");\r\n    }\r\n\r\n    @Override\r\n    public void find() {\r\n        target.find();\r\n    }\r\n}<\/pre> \n 

    \u6d4b\u8bd5\u7ed3\u679c\uff1a<\/p> \n

    \"\"<\/p> \n

    \u9759\u6001\u4ee3\u7406\u867d\u7136\u4fdd\u8bc1\u4e86\u4e1a\u52a1\u7c7b\u53ea\u9700\u5173\u6ce8\u903b\u8f91\u672c\u8eab\uff0c\u4ee3\u7406\u5bf9\u8c61\u7684\u4e00\u4e2a\u63a5\u53e3\u53ea\u670d\u52a1\u4e8e\u4e00\u79cd\u7c7b\u578b\u7684\u5bf9\u8c61\u3002\u5982\u679c\u8981\u4ee3\u7406\u7684\u65b9\u6cd5\u5f88\u591a\uff0c\u52bf\u5fc5\u8981\u4e3a\u6bcf\u4e00\u79cd\u65b9\u6cd5\u90fd\u8fdb\u884c\u4ee3\u7406\u3002\u518d\u8005\uff0c\u5982\u679c\u589e\u52a0\u4e00\u4e2a\u65b9\u6cd5\uff0c\u9664\u4e86\u5b9e\u73b0\u7c7b\u9700\u8981\u5b9e\u73b0\u8fd9\u4e2a\u65b9\u6cd5\u5916\uff0c\u6240\u6709\u7684\u4ee3\u7406\u7c7b\u4e5f\u8981\u5b9e\u73b0\u6b64\u65b9\u6cd5\u3002\u589e\u52a0\u4e86\u4ee3\u7801\u7684\u7ef4\u62a4\u6210\u672c\u3002\u90a3\u4e48\u8981\u5982\u4f55\u89e3\u51b3\u5462\uff1f\u7b54\u6848\u662f\u4f7f\u7528\u52a8\u6001\u4ee3\u7406\u3002<\/p> \n

    3. \u52a8\u6001\u4ee3\u7406\u539f\u7406\u53ca\u5b9e\u8df5<\/h3> \n

    \u52a8\u6001\u4ee3\u7406\u6a21\u5f0f\uff1a\u52a8\u6001\u4ee3\u7406\u7c7b\u7684\u6e90\u7801\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u671f\u95f4\uff0c\u901a\u8fc7 JVM \u53cd\u5c04\u7b49\u673a\u5236\u52a8\u6001\u751f\u6210\u3002\u4ee3\u7406\u7c7b\u548c\u59d4\u6258\u7c7b\u7684\u5173\u7cfb\u662f\u8fd0\u884c\u65f6\u624d\u786e\u5b9a\u7684\u3002\u5b9e\u4f8b\u5982\u4e0b\uff1a<\/p> \n

    package test.dynamicProxy;\r\n\r\nimport java<\/a>.lang.reflect.InvocationHandler;\r\nimport java<\/a>.lang.reflect.Method;\r\nimport java.lang.reflect.Proxy;\r\n\r\n\/\/ \u63a5\u53e3\r\npublic interface IUserDao {\r\n    void save();\r\n    void find();\r\n}\r\n\r\n\/\/\u76ee\u6807\u5bf9\u8c61\r\nclass UserDao implements IUserDao{\r\n\r\n    @Override\r\n    public void save() {\r\n        System.out.println("\u6a21\u62df\uff1a \u4fdd\u5b58\u7528\u6237\uff01");\r\n    }\r\n\r\n    @Override\r\n    public void find() {\r\n        System.out.println("\u67e5\u8be2");\r\n    }\r\n}\r\n\r\n\/**\r\n * \u52a8\u6001\u4ee3\u7406\uff1a\r\n * \u4ee3\u7406\u5de5\u5382\uff0c\u7ed9\u591a\u4e2a\u76ee\u6807\u5bf9\u8c61\u751f\u6210\u4ee3\u7406\u5bf9\u8c61\uff01\r\n *\r\n *\/\r\nclass ProxyFactory {\r\n\r\n    \/\/ \u63a5\u6536\u4e00\u4e2a\u76ee\u6807\u5bf9\u8c61\r\n    private Object target;\r\n\r\n    public ProxyFactory(Object target) {\r\n        this.target = target;\r\n    }\r\n\r\n    \/\/ \u8fd4\u56de\u5bf9\u76ee\u6807\u5bf9\u8c61(target)\u4ee3\u7406\u540e\u7684\u5bf9\u8c61(proxy)\r\n    public Object getProxyInstance() {\r\n        Object proxy = Proxy.newProxyInstance(\r\n            target.getClass().getClassLoader(),  \/\/ \u76ee\u6807\u5bf9\u8c61\u4f7f\u7528\u7684\u7c7b\u52a0\u8f7d\u5668\r\n            target.getClass().getInterfaces(),   \/\/ \u76ee\u6807\u5bf9\u8c61\u5b9e\u73b0\u7684\u6240\u6709\u63a5\u53e3\r\n            new InvocationHandler() {            \/\/ \u6267\u884c\u4ee3\u7406\u5bf9\u8c61\u65b9\u6cd5\u65f6\u5019\u89e6\u53d1\r\n\r\n                @Override\r\n                public Object invoke(Object proxy, Method method, Object[] args)\r\n                        throws Throwable {\r\n\r\n                    \/\/ \u83b7\u53d6\u5f53\u524d\u6267\u884c\u7684\u65b9\u6cd5\u7684\u65b9\u6cd5\u540d\r\n                    String methodName = method.getName();\r\n                    \/\/ \u65b9\u6cd5\u8fd4\u56de\u503c\r\n                    Object result = null;\r\n                    if ("find".equals(methodName)) {\r\n                        \/\/ \u76f4\u63a5\u8c03\u7528\u76ee\u6807\u5bf9\u8c61\u65b9\u6cd5\r\n                        result = method.invoke(target, args);\r\n                    } else {\r\n                        System.out.println("\u5f00\u542f\u4e8b\u52a1...");\r\n                        \/\/ \u6267\u884c\u76ee\u6807\u5bf9\u8c61\u65b9\u6cd5\r\n                        result = method.invoke(target, args);\r\n                        System.out.println("\u63d0\u4ea4\u4e8b\u52a1...");\r\n                    }\r\n                    return result;\r\n                }\r\n            }\r\n        );\r\n        return proxy;\r\n    }\r\n}<\/pre> \n 

    \u6d4b\u8bd5\u7ed3\u679c\u5982\u4e0b\uff1a<\/p> \n

    \"\"<\/a><\/p> \n

    IUserDao proxy = (IUserDao)new ProxyFactory(target).getProxyInstance();<\/pre> \n 

    \u5176\u5b9e\u662f JDK \u52a8\u6001\u751f\u6210\u4e86\u4e00\u4e2a\u7c7b\u53bb\u5b9e\u73b0\u63a5\u53e3\uff0c\u9690\u85cf\u4e86\u8fd9\u4e2a\u8fc7\u7a0b\uff1a<\/p> \n

    class $jdkProxy implements IUserDao{}<\/pre> \n 

    \u4f7f\u7528 JDK \u751f\u6210\u7684\u52a8\u6001\u4ee3\u7406\u7684\u524d\u63d0\u662f\u76ee\u6807\u7c7b\u5fc5\u987b\u6709\u5b9e\u73b0\u7684\u63a5\u53e3<\/strong>\u3002\u4f46\u8fd9\u91cc\u53c8\u5f15\u5165\u4e00\u4e2a\u95ee\u9898\uff0c\u5982\u679c\u67d0\u4e2a\u7c7b\u6ca1\u6709\u5b9e\u73b0\u63a5\u53e3\uff0c\u5c31\u4e0d\u80fd\u4f7f\u7528 JDK \u52a8\u6001\u4ee3\u7406\u3002\u6240\u4ee5 CGLIB \u4ee3\u7406\u5c31\u662f\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\u7684\u3002<\/p> \n

    CGLIB \u662f\u4ee5\u52a8\u6001\u751f\u6210\u7684\u5b50\u7c7b\u7ee7\u627f\u76ee\u6807\u7684\u65b9\u5f0f\u5b9e\u73b0\uff0c\u5728\u8fd0\u884c\u671f\u52a8\u6001\u7684\u5728\u5185\u5b58\u4e2d\u6784\u5efa\u4e00\u4e2a\u5b50\u7c7b\uff0c\u5982\u4e0b\uff1a<\/p> \n

    public class UserDao{}\r\n\r\n\/\/ CGLIB \u662f\u4ee5\u52a8\u6001\u751f\u6210\u7684\u5b50\u7c7b\u7ee7\u627f\u76ee\u6807\u7684\u65b9\u5f0f\u5b9e\u73b0,\u7a0b\u5e8f\u6267\u884c\u65f6,\u9690\u85cf\u4e86\u4e0b\u9762\u7684\u8fc7\u7a0b\r\npublic class $Cglib_Proxy_class  extends","orderid":"0","title":"Spring AOP\u662f\u4ec0\u4e48\uff1f\u4f60\u90fd\u62ff\u5b83\u505a\u4ec0\u4e48\uff1f(\u4e00)","smalltitle":"","mid":"0","fname":"JAVA","special_id":"0","bak_id":"0","info":"0","hits":"425","pages":"3","comments":"0","posttime":"2019-01-12 22:09:42","list":"1547302182","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"http:\/\/incdn1.b0.upaiyun.com\/2019\/01\/e7c378a13d15383d32c61af048eec3f1.png","ispic":"1","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"Spring<\/A> AOP<\/A> \u4ec0\u4e48<\/A> \u90fd\u62ff\u5b83<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"47.106.78.186","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"Spring AOP\u662f\u4ec0\u4e48\uff1f\u4f60\u90fd\u62ff\u5b83\u505a\u4ec0\u4e48\uff1f","lastview":"1713524727","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}