Spring中的ioc和aop有什么作用?为什么要用ioc和aop?面试中多次被问到,求一个详细 清晰的解答... ioc和aop的区别?

spring ioc aop \u7684\u539f\u7406\u662f\u4ec0\u4e48\u554a\uff0c\u9762\u8bd5\u65f6\u6211\u600e\u4e48\u56de\u7b54\u624d\u597d\u5462\uff1f\u8bf4\u8bf4\u9762\u8bd5\u6280\u5de7\u597d\u5417

IOC:\u63a7\u5236\u53cd\u8f6c\u4e5f\u53eb\u4f9d\u8d56\u6ce8\u5165\u3002\u5229\u7528\u4e86\u5de5\u5382\u6a21\u5f0f
\u5c06\u5bf9\u8c61\u4ea4\u7ed9\u5bb9\u5668\u7ba1\u7406\uff0c\u4f60\u53ea\u9700\u8981\u5728spring\u914d\u7f6e\u6587\u4ef6\u603b\u914d\u7f6e\u76f8\u5e94\u7684bean\uff0c\u4ee5\u53ca\u8bbe\u7f6e\u76f8\u5173\u7684\u5c5e\u6027\uff0c\u8ba9spring\u5bb9\u5668\u6765\u751f\u6210\u7c7b\u7684\u5b9e\u4f8b\u5bf9\u8c61\u4ee5\u53ca\u7ba1\u7406\u5bf9\u8c61\u3002\u5728spring\u5bb9\u5668\u542f\u52a8\u7684\u65f6\u5019\uff0cspring\u4f1a\u628a\u4f60\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u914d\u7f6e\u7684bean\u90fd\u521d\u59cb\u5316\u597d\uff0c\u7136\u540e\u5728\u4f60\u9700\u8981\u8c03\u7528\u7684\u65f6\u5019\uff0c\u5c31\u628a\u5b83\u5df2\u7ecf\u521d\u59cb\u5316\u597d\u7684\u90a3\u4e9bbean\u5206\u914d\u7ed9\u4f60\u9700\u8981\u8c03\u7528\u8fd9\u4e9bbean\u7684\u7c7b\uff08\u5047\u8bbe\u8fd9\u4e2a\u7c7b\u540d\u662fA\uff09\uff0c\u5206\u914d\u7684\u65b9\u6cd5\u5c31\u662f\u8c03\u7528A\u7684setter\u65b9\u6cd5\u6765\u6ce8\u5165\uff0c\u800c\u4e0d\u9700\u8981\u4f60\u5728A\u91cc\u9762new\u8fd9\u4e9bbean\u4e86\u3002
\u6ce8\u610f\uff1a\u9762\u8bd5\u7684\u65f6\u5019\uff0c\u5982\u679c\u6709\u6761\u4ef6\uff0c\u753b\u56fe\uff0c\u8fd9\u6837\u66f4\u52a0\u663e\u5f97\u4f60\u61c2\u4e86
AOP:\u9762\u5411\u5207\u9762\u7f16\u7a0b\u3002\uff08Aspect-Oriented Programming\uff09
AOP\u53ef\u4ee5\u8bf4\u662f\u5bf9OOP\u7684\u8865\u5145\u548c\u5b8c\u5584\u3002OOP\u5f15\u5165\u5c01\u88c5\u3001\u7ee7\u627f\u548c\u591a\u6001\u6027\u7b49\u6982\u5ff5\u6765\u5efa\u7acb\u4e00\u79cd\u5bf9\u8c61\u5c42\u6b21\u7ed3\u6784\uff0c\u7528\u4ee5\u6a21\u62df\u516c\u5171\u884c\u4e3a\u7684\u4e00\u4e2a\u96c6\u5408\u3002\u5f53\u6211\u4eec\u9700\u8981\u4e3a\u5206\u6563\u7684\u5bf9\u8c61\u5f15\u5165\u516c\u5171\u884c\u4e3a\u7684\u65f6\u5019\uff0cOOP\u5219\u663e\u5f97\u65e0\u80fd\u4e3a\u529b\u3002\u4e5f\u5c31\u662f\u8bf4\uff0cOOP\u5141\u8bb8\u4f60\u5b9a\u4e49\u4ece\u4e0a\u5230\u4e0b\u7684\u5173\u7cfb\uff0c\u4f46\u5e76\u4e0d\u9002\u5408\u5b9a\u4e49\u4ece\u5de6\u5230\u53f3\u7684\u5173\u7cfb\u3002\u4f8b\u5982\u65e5\u5fd7\u529f\u80fd\u3002\u65e5\u5fd7\u4ee3\u7801\u5f80\u5f80\u6c34\u5e73\u5730\u6563\u5e03\u5728\u6240\u6709\u5bf9\u8c61\u5c42\u6b21\u4e2d\uff0c\u800c\u4e0e\u5b83\u6240\u6563\u5e03\u5230\u7684\u5bf9\u8c61\u7684\u6838\u5fc3\u529f\u80fd\u6beb\u65e0\u5173\u7cfb\u3002\u5728OOP\u8bbe\u8ba1\u4e2d\uff0c\u5b83\u5bfc\u81f4\u4e86\u5927\u91cf\u4ee3\u7801\u7684\u91cd\u590d\uff0c\u800c\u4e0d\u5229\u4e8e\u5404\u4e2a\u6a21\u5757\u7684\u91cd\u7528\u3002
\u5c06\u7a0b\u5e8f\u4e2d\u7684\u4ea4\u53c9\u4e1a\u52a1\u903b\u8f91\uff08\u6bd4\u5982\u5b89\u5168\uff0c\u65e5\u5fd7\uff0c\u4e8b\u52a1\u7b49\uff09\uff0c\u5c01\u88c5\u6210\u4e00\u4e2a\u5207\u9762\uff0c\u7136\u540e\u6ce8\u5165\u5230\u76ee\u6807\u5bf9\u8c61\uff08\u5177\u4f53\u4e1a\u52a1\u903b\u8f91\uff09\u4e2d\u53bb\u3002

\u5b9e\u73b0AOP\u7684\u6280\u672f\uff0c\u4e3b\u8981\u5206\u4e3a\u4e24\u5927\u7c7b\uff1a\u4e00\u662f\u91c7\u7528\u52a8\u6001\u4ee3\u7406\u6280\u672f\uff0c\u5229\u7528\u622a\u53d6\u6d88\u606f\u7684\u65b9\u5f0f\uff0c\u5bf9\u8be5\u6d88\u606f\u8fdb\u884c\u88c5\u9970\uff0c\u4ee5\u53d6\u4ee3\u539f\u6709\u5bf9\u8c61\u884c\u4e3a\u7684\u6267\u884c\uff1b\u4e8c\u662f\u91c7\u7528\u9759\u6001\u7ec7\u5165\u7684\u65b9\u5f0f\uff0c\u5f15\u5165\u7279\u5b9a\u7684\u8bed\u6cd5\u521b\u5efa\u201c\u65b9\u9762\u201d\uff0c\u4ece\u800c\u4f7f\u5f97\u7f16\u8bd1\u5668\u53ef\u4ee5\u5728\u7f16\u8bd1\u671f\u95f4\u7ec7\u5165\u6709\u5173\u201c\u65b9\u9762\u201d\u7684\u4ee3\u7801
\u7b80\u5355\u70b9\u89e3\u91ca\uff0c\u6bd4\u65b9\u8bf4\u4f60\u60f3\u5728\u4f60\u7684biz\u5c42\u6240\u6709\u7c7b\u4e2d\u90fd\u52a0\u4e0a\u4e00\u4e2a\u6253\u5370\u2018\u4f60\u597d\u2019\u7684\u529f\u80fd\u8fd9\u4f60\u7ecf\u53ef\u4ee5\u7528aop\u601d\u60f3\u6765\u505a\uff0c\u4f60\u5148\u5199\u4e2a\u7c7b\u5199\u4e2a\u65b9\u6cd5\uff0c\u65b9\u6cd5\u7ecf\u5b9e\u73b0\u6253\u5370\u2018\u4f60\u597d\u2019\u8ba9\u540e\u4f60Ioc\u8fd9\u4e2a\u7c7b ref\uff1d\u201cbiz.*\u201d\u8ba9\u6bcf\u4e2a\u7c7b\u90fd\u6ce8\u5165\u3002

1 IoC\uff0c\uff08Inverse of Control\uff09\u63a7\u5236\u53cd\u8f6c\uff0c\u5176\u5305\u542b\u4e24\u4e2a\u5185\u5bb9\uff1a\u5176\u4e00\u662f\u63a7\u5236\uff0c\u5176\u4e8c\u662f\u53cd\u8f6c\u3002\u5728\u7a0b\u5e8f\u4e2d\uff0c\u88ab\u8c03\u7528\u7c7b\u7684\u9009\u62e9\u63a7\u5236\u6743\u4ece\u8c03\u7528\u5b83\u7684\u7c7b\u4e2d\u79fb\u9664\uff0c\u8f6c\u4ea4\u7ed9\u7b2c\u4e09\u65b9\u88c1\u51b3\u3002\u8fd9\u4e2a\u7b2c\u4e09\u65b9\u6307\u7684\u5c31\u662fSpring\u7684\u5bb9\u5668\u3002IoC\u53e6\u89e3\uff0c\u4f9d\u8d56\u6ce8\u5165\uff08Dependency Injection\uff09\uff0c\u8c03\u7528\u7c7b\u5bf9\u88ab\u8c03\u7528\u7c7b\u7684\u4f9d\u8d56\u5173\u7cfb\u7531\u7b2c\u4e09\u65b9\u6ce8\u5165\uff0c\u4ee5\u79fb\u9664\u8c03\u7528\u7c7b\u5bf9\u88ab\u8c03\u7528\u7c7b\u7684\u5f15\u7528\u30022 aop\uff0c\u9762\u5411\u5207\u9762\u7f16\u7a0b(\u4e5f\u53eb\u9762\u5411\u65b9\u9762)\uff1aAspect Oriented Programming(AOP),\u662f\u76ee\u524d\u8f6f\u4ef6\u5f00\u53d1\u4e2d\u7684\u4e00\u4e2a\u70ed\u70b9\uff0c\u4e5f\u662fSpring\u6846\u67b6\u4e2d\u7684\u4e00\u4e2a\u91cd\u8981\u5185\u5bb9\u3002\u5229\u7528AOP\u53ef\u4ee5\u5bf9\u4e1a\u52a1\u903b\u8f91\u7684\u5404\u4e2a\u90e8\u5206\u8fdb\u884c\u9694\u79bb\uff0c\u4ece\u800c\u4f7f\u5f97\u4e1a\u52a1\u903b\u8f91\u5404\u90e8\u5206\u4e4b\u95f4\u7684\u8026\u5408\u5ea6\u964d\u4f4e\uff0c\u63d0\u9ad8\u7a0b\u5e8f\u7684\u53ef\u91cd\u7528\u6027\uff0c\u540c\u65f6\u63d0\u9ad8\u4e86\u5f00\u53d1\u7684\u6548\u7387\u3002 \u3000
3 AOP\u662fOOP\u7684\u5ef6\u7eed\uff0c\u662f\uff08Aspect Oriented Programming\uff09\u7684\u7f29\u5199\uff0c\u610f\u601d\u662f\u9762\u5411\u5207\u9762\uff08\u65b9\u9762\uff09\u7f16\u7a0b\u3002\u4e3b\u8981\u7684\u529f\u80fd\u662f\uff1a\u65e5\u5fd7\u8bb0\u5f55\uff0c\u6027\u80fd\u7edf\u8ba1\uff0c\u5b89\u5168\u63a7\u5236\uff0c\u4e8b\u52a1\u5904\u7406\uff0c\u5f02\u5e38\u5904\u7406\u7b49\u7b49\u3002 \u3000\u3000
4 \u4e3b\u8981\u7684\u610f\u56fe\u662f\uff1a\u5c06\u65e5\u5fd7\u8bb0\u5f55\uff0c\u6027\u80fd\u7edf\u8ba1\uff0c\u5b89\u5168\u63a7\u5236\uff0c\u4e8b\u52a1\u5904\u7406\uff0c\u5f02\u5e38\u5904\u7406\u7b49\u4ee3\u7801\u4ece\u4e1a\u52a1\u903b\u8f91\u4ee3\u7801\u4e2d\u5212\u5206\u51fa\u6765\uff0c\u901a\u8fc7\u5bf9\u8fd9\u4e9b\u884c\u4e3a\u7684\u5206\u79bb\uff0c\u6211\u4eec\u5e0c\u671b\u53ef\u4ee5\u5c06\u5b83\u4eec\u72ec\u7acb\u5230\u975e\u6307\u5bfc\u4e1a\u52a1\u903b\u8f91\u7684\u65b9\u6cd5\u4e2d\uff0c\u8fdb\u800c\u6539 \u53d8\u8fd9\u4e9b\u884c\u4e3a\u7684\u65f6\u5019\u4e0d\u5f71\u54cd\u4e1a\u52a1\u903b\u8f91\u7684\u4ee3\u7801\u3002


\u6269\u5c55\u8d44\u6599\uff1a
IoC\u662f\u4e00\u4e2a\u5f88\u5927\u7684\u6982\u5ff5,\u53ef\u4ee5\u7528\u4e0d\u540c\u7684\u65b9\u5f0f\u5b9e\u73b0\u3002\u5176\u4e3b\u8981\u5f62\u5f0f\u6709\u4e24\u79cd\uff1a
\u4f9d\u8d56\u67e5\u627e\uff1a\u5bb9\u5668\u63d0\u4f9b\u56de\u8c03\u63a5\u53e3\u548c\u4e0a\u4e0b\u6587\u6761\u4ef6\u7ed9\u7ec4\u4ef6\u3002EJB\u548cApache Avalon \u90fd\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\u3002\u8fd9\u6837\u4e00\u6765\uff0c\u7ec4\u4ef6\u5c31\u5fc5\u987b\u4f7f\u7528\u5bb9\u5668\u63d0\u4f9b\u7684API\u6765\u67e5\u627e\u8d44\u6e90\u548c\u534f\u4f5c\u5bf9\u8c61\uff0c\u4ec5\u6709\u7684\u63a7\u5236\u53cd\u8f6c\u53ea\u4f53\u73b0\u5728\u90a3\u4e9b\u56de\u8c03\u65b9\u6cd5\u4e0a\uff08\u4e5f\u5c31\u662f\u4e0a\u9762\u6240\u8bf4\u7684 \u7c7b\u578b1\uff09\uff1a\u5bb9\u5668\u5c06\u8c03\u7528\u8fd9\u4e9b\u56de\u8c03\u65b9\u6cd5\uff0c\u4ece\u800c\u8ba9\u5e94\u7528\u4ee3\u7801\u83b7\u5f97\u76f8\u5173\u8d44\u6e90\u3002
\u4f9d\u8d56\u6ce8\u5165\uff1a\u7ec4\u4ef6\u4e0d\u505a\u5b9a\u4f4d\u67e5\u8be2\uff0c\u53ea\u63d0\u4f9b\u666e\u901a\u7684Java\u65b9\u6cd5\u8ba9\u5bb9\u5668\u53bb\u51b3\u5b9a\u4f9d\u8d56\u5173\u7cfb\u3002\u5bb9\u5668\u5168\u6743\u8d1f\u8d23\u7684\u7ec4\u4ef6\u7684\u88c5\u914d\uff0c\u5b83\u4f1a\u628a\u7b26\u5408\u4f9d\u8d56\u5173\u7cfb\u7684\u5bf9\u8c61\u901a\u8fc7JavaBean\u5c5e\u6027\u6216\u8005\u6784\u9020\u51fd\u6570\u4f20\u9012\u7ed9\u9700\u8981\u7684\u5bf9\u8c61\u3002\u901a\u8fc7JavaBean\u5c5e\u6027\u6ce8\u5c04\u4f9d\u8d56\u5173\u7cfb\u7684\u505a\u6cd5\u79f0\u4e3a\u8bbe\u503c\u65b9\u6cd5\u6ce8\u5165(Setter Injection)\uff1b\u5c06\u4f9d\u8d56\u5173\u7cfb\u4f5c\u4e3a\u6784\u9020\u51fd\u6570\u53c2\u6570\u4f20\u5165\u7684\u505a\u6cd5\u79f0\u4e3a\u6784\u9020\u5668\u6ce8\u5165\uff08Constructor Injection\uff09
\u5b9e\u73b0\u6570\u636e\u8bbf\u95ee\u5c42
\u6570\u636e\u8bbf\u95ee\u5c42\u6709\u4e24\u4e2a\u76ee\u6807\u3002\u7b2c\u4e00\u662f\u5c06\u6570\u636e\u5e93\u5f15\u64ce\u4ece\u5e94\u7528\u4e2d\u62bd\u8c61\u51fa\u6765\uff0c\u8fd9\u6837\u5c31\u53ef\u4ee5\u968f\u65f6\u6539\u53d8\u6570\u636e\u5e93\u2014\u6bd4\u65b9\u8bf4\uff0c\u4ece\u5fae\u8f6fSQL\u53d8\u6210Oracle\u3002\u4e0d\u8fc7\u5728\u5b9e\u8df5\u4e0a\u5f88\u5c11\u4f1a\u8fd9\u4e48\u505a\uff0c\u4e5f\u6ca1\u6709\u8db3\u591f\u7684\u7406\u7531\u672a\u6765\u4f7f\u7528\u5b9e\u73b0\u6570\u636e\u8bbf\u95ee\u5c42\u800c\u8fdb\u884c\u91cd\u6784\u73b0\u6709\u5e94\u7528\u7684\u52aa\u529b\u3002
\u7b2c\u4e8c\u4e2a\u76ee\u6807\u662f\u5c06\u6570\u636e\u6a21\u578b\u4ece\u6570\u636e\u5e93\u5b9e\u73b0\u4e2d\u62bd\u8c61\u51fa\u6765\u3002\u8fd9\u4f7f\u5f97\u6570\u636e\u5e93\u6216\u4ee3\u7801\u5f00\u6e90\u6839\u636e\u9700\u8981\u6539\u53d8\uff0c\u540c\u65f6\u53ea\u4f1a\u5f71\u54cd\u4e3b\u5e94\u7528\u7684\u4e00\u5c0f\u90e8\u5206\u2014\u2014\u6570\u636e\u8bbf\u95ee\u5c42\u3002\u8fd9\u4e00\u76ee\u6807\u662f\u503c\u5f97\u7684\uff0c\u4e3a\u4e86\u5728\u73b0\u6709\u7cfb\u7edf\u4e2d\u5b9e\u73b0\u5b83\u8fdb\u884c\u5fc5\u8981\u7684\u91cd\u6784\u3002
\u6a21\u5757\u4e0e\u63a5\u53e3\u91cd\u6784
\u4f9d\u8d56\u6ce8\u5165\u80cc\u540e\u7684\u4e00\u4e2a\u6838\u5fc3\u601d\u60f3\u662f\u5355\u4e00\u529f\u80fd\u539f\u5219\uff08single responsibility principle\uff09\u3002\u8be5\u539f\u5219\u6307\u51fa\uff0c\u6bcf\u4e00\u4e2a\u5bf9\u8c61\u5e94\u8be5\u6709\u4e00\u4e2a\u7279\u5b9a\u7684\u76ee\u7684\uff0c\u800c\u5e94\u7528\u9700\u8981\u5229\u7528\u8fd9\u4e00\u76ee\u7684\u7684\u4e0d\u540c\u90e8\u5206\u5e94\u5f53\u4f7f\u7528\u5408\u9002\u7684\u5bf9\u8c61\u3002\u8fd9\u610f\u5473\u7740\u8fd9\u4e9b\u5bf9\u8c61\u5728\u7cfb\u7edf\u7684\u4efb\u4f55\u5730\u65b9\u90fd\u53ef\u4ee5\u91cd\u7528\u3002\u4f46\u5728\u73b0\u6709\u7cfb\u7edf\u91cc\u9762\u5f88\u591a\u65f6\u5019\u90fd\u4e0d\u662f\u8fd9\u6837\u7684\u3002
\u968f\u65f6\u589e\u52a0\u5355\u5143\u6d4b\u8bd5
\u628a\u529f\u80fd\u5c01\u88c5\u5230\u6574\u4e2a\u5bf9\u8c61\u91cc\u9762\u4f1a\u5bfc\u81f4\u81ea\u52a8\u6d4b\u8bd5\u56f0\u96be\u6216\u8005\u4e0d\u53ef\u80fd\u3002\u5c06\u6a21\u5757\u548c\u63a5\u53e3\u4e0e\u7279\u5b9a\u5bf9\u8c61\u9694\u79bb\uff0c\u4ee5\u8fd9\u79cd\u65b9\u5f0f\u91cd\u6784\u53ef\u4ee5\u6267\u884c\u66f4\u5148\u8fdb\u7684\u5355\u5143\u6d4b\u8bd5\u3002\u6309\u7167\u540e\u9762\u518d\u589e\u52a0\u6d4b\u8bd5\u7684\u60f3\u6cd5\u7ee7\u7eed\u91cd\u6784\u6a21\u5757\u662f\u8bf1\u60d1\u529b\u7684\uff0c\u4f46\u8fd9\u662f\u9519\u8bef\u7684\u3002
\u4f7f\u7528\u670d\u52a1\u5b9a\u4f4d\u5668\u800c\u4e0d\u662f\u6784\u9020\u6ce8\u5165
\u5b9e\u73b0\u63a7\u5236\u53cd\u8f6c\u4e0d\u6b62\u4e00\u79cd\u65b9\u6cd5\u3002\u6700\u5e38\u89c1\u7684\u529e\u6cd5\u662f\u4f7f\u7528\u6784\u9020\u6ce8\u5165\uff0c\u8fd9\u9700\u8981\u5728\u5bf9\u8c61\u9996\u6b21\u88ab\u521b\u5efa\u662f\u63d0\u4f9b\u6240\u6709\u7684\u8f6f\u4ef6\u4f9d\u8d56\u3002\u7136\u800c\uff0c\u6784\u9020\u6ce8\u5165\u8981\u5047\u8bbe\u6574\u4e2a\u7cfb\u7edf\u90fd\u4f7f\u7528\u8fd9\u4e00\u6a21\u5f0f\uff0c\u8fd9\u610f\u5473\u7740\u6574\u4e2a\u7cfb\u7edf\u5fc5\u987b\u540c\u65f6\u8fdb\u884c\u91cd\u6784\u3002\u8fd9\u5f88\u56f0\u96be\u3001\u6709\u98ce\u9669\uff0c\u4e14\u8017\u65f6\u3002
AOP\u3001OOP\u5728\u5b57\u9762\u4e0a\u867d\u7136\u975e\u5e38\u7c7b\u4f3c\uff0c\u4f46\u5374\u662f\u9762\u5411\u4e0d\u540c\u9886\u57df\u7684\u4e24\u79cd\u8bbe\u8ba1\u601d\u60f3\u3002OOP\uff08\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff09\u9488\u5bf9\u4e1a\u52a1\u5904\u7406\u8fc7\u7a0b\u7684\u5b9e\u4f53\u53ca\u5176\u5c5e\u6027\u548c\u884c\u4e3a\u8fdb\u884c\u62bd\u8c61\u5c01\u88c5\uff0c\u4ee5\u83b7\u5f97\u66f4\u52a0\u6e05\u6670\u9ad8\u6548\u7684\u903b\u8f91\u5355\u5143\u5212\u5206\u3002
\u800cAOP\u5219\u662f\u9488\u5bf9\u4e1a\u52a1\u5904\u7406\u8fc7\u7a0b\u4e2d\u7684\u5207\u9762\u8fdb\u884c\u63d0\u53d6\uff0c\u5b83\u6240\u9762\u5bf9\u7684\u662f\u5904\u7406\u8fc7\u7a0b\u4e2d\u7684\u67d0\u4e2a\u6b65\u9aa4\u6216\u9636\u6bb5\uff0c\u4ee5\u83b7\u5f97\u903b\u8f91\u8fc7\u7a0b\u4e2d\u5404\u90e8\u5206\u4e4b\u95f4\u4f4e\u8026\u5408\u6027\u7684\u9694\u79bb\u6548\u679c\u3002\u8fd9\u4e24\u79cd\u8bbe\u8ba1\u601d\u60f3\u5728\u76ee\u6807\u4e0a\u6709\u7740\u672c\u8d28\u7684\u5dee\u5f02\u3002
\u4e0a\u9762\u7684\u9648\u8ff0\u53ef\u80fd\u8fc7\u4e8e\u7406\u8bba\u5316\uff0c\u4e3e\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff0c\u5bf9\u4e8e\u201c\u96c7\u5458\u201d\u8fd9\u6837\u4e00\u4e2a\u4e1a\u52a1\u5b9e\u4f53\u8fdb\u884c\u5c01\u88c5\uff0c\u81ea\u7136\u662fOOP/OOD\u7684\u4efb\u52a1\uff0c\u6211\u4eec\u53ef\u4ee5\u4e3a\u5176\u5efa\u7acb\u4e00\u4e2a\u201cEmployee\u201d\u7c7b\uff0c\u5e76\u5c06\u201c\u96c7\u5458\u201d\u76f8\u5173\u7684\u5c5e\u6027\u548c\u884c\u4e3a\u5c01\u88c5\u5176\u4e2d\u3002\u800c\u7528AOP\u8bbe\u8ba1\u601d\u60f3\u5bf9\u201c\u96c7\u5458\u201d\u8fdb\u884c\u5c01\u88c5\u5c06\u65e0\u4ece\u8c08\u8d77\u3002
\u540c\u6837\uff0c\u5bf9\u4e8e\u201c\u6743\u9650\u68c0\u67e5\u201d\u8fd9\u4e00\u52a8\u4f5c\u7247\u65ad\u8fdb\u884c\u5212\u5206\uff0c\u5219\u662fAOP\u7684\u76ee\u6807\u9886\u57df\u3002\u800c\u901a\u8fc7OOD/OOP\u5bf9\u4e00\u4e2a\u52a8\u4f5c\u8fdb\u884c\u5c01\u88c5\uff0c\u5219\u6709\u70b9\u4e0d\u4f26\u4e0d\u7c7b\u3002
\u6362\u800c\u8a00\u4e4b\uff0cOOD/OOP\u9762\u5411\u540d\u8bcd\u9886\u57df\uff0cAOP\u9762\u5411\u52a8\u8bcd\u9886\u57df\u3002
\u9762\u5411\u8fc7\u7a0b\u7f16\u7a0b\u79bb\u6211\u4eec\u5df2\u7ecf\u6709\u4e9b\u9065\u8fdc\uff0c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u6b63\u4e3b\u5bb0\u7740\u8f6f\u4ef6\u4e16\u754c\u3002\u5f53\u6bcf\u4e2a\u65b0\u7684\u8f6f\u4ef6\u8bbe\u8ba1\u5e08\u90fd\u88ab\u8981\u6c42\u638c\u63e1\u5982\u4f55\u5c06\u9700\u6c42\u529f\u80fd\u8f6c\u5316\u6210\u4e00\u4e2a\u4e2a\u7c7b\uff0c\u5e76\u4e14\u5b9a\u4e49\u5b83\u4eec\u7684\u6570\u636e\u6210\u5458\u3001\u884c\u4e3a\uff0c\u4ee5\u53ca\u5b83\u4eec\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u7684\u65f6\u5019\uff0c\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff08Aspect-Oriented Programming\uff0cAOP\uff09\u4e3a\u6211\u4eec\u5e26\u6765\u4e86\u65b0\u7684\u60f3\u6cd5\u3001\u65b0\u7684\u601d\u60f3\u3001\u65b0\u7684\u6a21\u5f0f\u3002
\u5982\u679c\u8bf4\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u662f\u5173\u6ce8\u5c06\u9700\u6c42\u529f\u80fd\u5212\u5206\u4e3a\u4e0d\u540c\u7684\u5e76\u4e14\u76f8\u5bf9\u72ec\u7acb\uff0c\u5c01\u88c5\u826f\u597d\u7684\u7c7b\uff0c\u5e76\u8ba9\u5b83\u4eec\u6709\u7740\u5c5e\u4e8e\u81ea\u5df1\u7684\u884c\u4e3a\uff0c\u4f9d\u9760\u7ee7\u627f\u548c\u591a\u6001\u7b49\u6765\u5b9a\u4e49\u5f7c\u6b64\u7684\u5173\u7cfb\u7684\u8bdd\uff1b\u90a3\u4e48\u9762\u5411\u5207\u9762\u7f16\u7a0b\u5219\u662f\u5e0c\u671b\u80fd\u591f\u5c06\u901a\u7528\u9700\u6c42\u529f\u80fd\u4ece\u4e0d\u76f8\u5173\u7684\u7c7b\u5f53\u4e2d\u5206\u79bb\u51fa\u6765\uff0c\u80fd\u591f\u4f7f\u5f97\u5f88\u591a\u7c7b\u5171\u4eab\u4e00\u4e2a\u884c\u4e3a\uff0c\u4e00\u65e6\u53d1\u751f\u53d8\u5316\uff0c\u4e0d\u5fc5\u4fee\u6539\u5f88\u591a\u7c7b\uff0c\u800c\u53ea\u9700\u8981\u4fee\u6539\u8fd9\u4e2a\u884c\u4e3a\u5373\u53ef\u3002
\u9762\u5411\u5207\u9762\u7f16\u7a0b\u662f\u4e00\u4e2a\u4ee4\u4eba\u5174\u594b\u4e0d\u5df2\u7684\u65b0\u6a21\u5f0f\u3002\u5c31\u5f00\u53d1\u8f6f\u4ef6\u7cfb\u7edf\u800c\u8a00\uff0c\u5b83\u7684\u5f71\u54cd\u529b\u5fc5\u5c06\u4f1a\u548c\u6709\u7740\u6570\u5341\u5e74\u5e94\u7528\u5386\u53f2\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e00\u6837\u5de8\u5927\u3002\u9762\u5411\u5207\u9762\u7f16\u7a0b\u548c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e0d\u4f46\u4e0d\u662f\u4e92\u76f8\u7ade\u4e89\u7684\u6280\u672f\u800c\u4e14\u5f7c\u6b64\u8fd8\u662f\u5f88\u597d\u7684\u4e92\u8865\u3002
\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u4e3b\u8981\u7528\u4e8e\u4e3a\u540c\u4e00\u5bf9\u8c61\u5c42\u6b21\u7684\u516c\u7528\u884c\u4e3a\u5efa\u6a21\u3002\u5b83\u7684\u5f31\u70b9\u662f\u5c06\u516c\u5171\u884c\u4e3a\u5e94\u7528\u4e8e\u591a\u4e2a\u65e0\u5173\u5bf9\u8c61\u6a21\u578b\u4e4b\u95f4\u3002\u800c\u8fd9\u6070\u6070\u662f\u9762\u5411\u5207\u9762\u7f16\u7a0b\u9002\u5408\u7684\u5730\u65b9\u3002\u6709\u4e86 AOP\uff0c\u6211\u4eec\u53ef\u4ee5\u5b9a\u4e49\u4ea4\u53c9\u7684\u5173\u7cfb\uff0c\u5e76\u5c06\u8fd9\u4e9b\u5173\u7cfb\u5e94\u7528\u4e8e\u8de8\u6a21\u5757\u7684\u3001\u5f7c\u6b64\u4e0d\u540c\u7684\u5bf9\u8c61\u6a21\u578b\u3002AOP \u540c\u65f6\u8fd8\u53ef\u4ee5\u8ba9\u6211\u4eec\u5c42\u6b21\u5316\u529f\u80fd\u6027\u800c\u4e0d\u662f\u5d4c\u5165\u529f\u80fd\u6027\uff0c\u4ece\u800c\u4f7f\u5f97\u4ee3\u7801\u6709\u66f4\u597d\u7684\u53ef\u8bfb\u6027\u548c\u6613\u4e8e\u7ef4\u62a4\u3002\u5b83\u4f1a\u548c\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u5408\u4f5c\u5f97\u5f88\u597d\u3002
\u53c2\u8003\u8d44\u6599\uff1a\u767e\u5ea6\u767e\u79d1-aop \u767e\u5ea6\u767e\u79d1-ioc

还是需要去了解,多看看书!
IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。

AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。

Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。
不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便

我来说说我的理解:
面试的时候,尽量不要照本宣科,这样给面试官的印象是很差的。用自己的话理解是最好的。我先来将两个例子:
ioc,控制反转,这个指的就是我们获取对象的方式进行反转了,改变了。在使用spring之前是需要手动new出来的,是我们主动获取的。使用spring之后,是将这个获取的过程交给spring来管理,我们只需要告诉spring你需要什么就行了,它就会把东西给你。比如:在没有电商的时候,我们去上街买东西,需要考虑到这东西有没有,价钱多少,怎么搬回来,去有多远……等等无数个和主要的业务逻辑(买东西)无关的问题。这样就会扰乱主业务逻辑。当我们有了电商平台后,买东西时只需要两步。注册账号(装载bean),告诉电商你要的东西名字(通过名字获取Bean),然后就可以在门口收到东西了。这就是ioc。
aop,面向切面。在谈这个之前需要了解几个词:切面,切入点,织入,目标对象,通知。

我先解释下名字的意思,再讲故事。
切面:就是你要准备增强的那些方法。
切入点:就是具体织入的方法,定义了地点
织入:动词,就是将切面织入的过层
目标对象:被增强的类
通知:就是什么时候增强,定义了时间
好了,了解清楚上面的几个词的意思后,再听故事就容易多了。
aop的功能就是用来增强,在执行主业务的通知也顺带执行其他业务。如:老李上街办点事儿,走啊走,走到了老王家门前(切入点),老王看见老李问:去哪啊!

老李:上街办点事儿(目标类)
老王:那帮我顺便把这封信投到邮筒里吧。(切面),等到10点的时候邮局开门了去柜台投。(通知)
老李:好嘞。然后老李接过信。(织入)
老李继续走啊走,继续上街办事(增强后的目标类)。办完事后老李回家了。
以上就是aop。aop一般用来处理权限控制,日志记录,加载事务等非主要业务逻辑的事情。底层是采用cglib和jdk的动态代理实现的。
以上例子可能会有点不恰当,如有大神,望指点修正,谢谢!

ioc为Inversion of Control意思是控制反转,AOP是面向切面。spring就是他们结合的容器框架。
在spring的bean结构中如<bean id="PersonDaoBean" class="..PersonDao"/>,在一个Service类中可以这样写 private PersonDao personDao = new PersonDaoBean();你看这样PersonDao对象就不用自己创建和维护了,交给了bean。也就是控制反转。
AOP设置拦截用户的业务方法,判断权限,有权限则可以执行调用的业务方法,没有权限则不可以。在拦截的时候出现环绕通知 ,前置通知,后置通知,例外通知,最终通知。
这是我的答案,望采纳,要是喜欢,请支持,很难打字的。

  • 浠涔堟槸 spring 鐨 ioc aop浠涔堟槸 spring 鐨 ioc aop
    绛旓細渚濊禆娉ㄥ叆锛圖ependecy Injection锛夊拰鎺у埗鍙嶈浆锛圛nversion of Control锛夋槸鍚屼竴涓蹇碉紝鍏蜂綋鐨勮锛氬綋鏌愪釜瑙掕壊闇瑕佸彟澶栦竴涓鑹插崗鍔╃殑鏃跺欙紝鍦ㄤ紶缁熺殑绋嬪簭璁捐杩囩▼涓紝閫氬父鐢辫皟鐢ㄨ呮潵鍒涘缓琚皟鐢ㄨ呯殑瀹炰緥銆備絾鍦spring涓鍒涘缓琚皟鐢ㄨ呯殑宸ヤ綔涓嶅啀鐢辫皟鐢ㄨ呮潵瀹屾垚锛屽洜姝ょО涓烘帶鍒跺弽杞傚垱寤鸿璋冪敤鑰呯殑宸ヤ綔鐢眘pring鏉ュ畬鎴...
  • spring鐨刬oc鍜宎op閮芥槸浠涔??
    绛旓細Ioc鈥擨nversion of Control锛屽嵆鈥滄帶鍒跺弽杞濓紝涓嶆槸浠涔堟妧鏈紝鑰屾槸涓绉嶈璁℃濇兂銆傚湪Java寮鍙戜腑锛孖oc鎰忓懗鐫灏嗕綘璁捐濂界殑瀵硅薄浜ょ粰瀹瑰櫒鎺у埗锛岃屼笉鏄紶缁熺殑鍦ㄤ綘鐨勫璞″唴閮ㄧ洿鎺ユ帶鍒躲傚浣曠悊瑙eソIoc鍛紵鐞嗚В濂絀oc鐨勫叧閿槸瑕佹槑纭滆皝鎺у埗璋侊紝鎺у埗浠涔堬紝涓轰綍鏄弽杞紙鏈夊弽杞氨搴旇鏈夋杞簡锛夛紝鍝簺鏂归潰鍙嶈浆浜嗏濓紝閭...
  • spring涓殑ioc鏄粈涔堝崟璇嶇殑缂╁啓?
    绛旓細IOC鏄疘nversion of Control锛堟帶鍒跺弽杞級鐨勭畝鍐.浠庡瓧闈㈡剰鎬濇潵鐪嬶紝灏辨槸鎺у埗鏉冪敱琚姩鍙樹富鍔ㄥ張鍙樹负琚姩锛屾垨琚姩鍙樹富鍔ㄥ張鍙樹负琚姩锛屼篃鏈変汉绉颁负鈥滀緷璧栨敞鍏モ濄
  • spring鐨涓ゅぇ鏍稿績姒傚康鏄粈涔
    绛旓細spring鐨涓ゅぇ鏍稿績姒傚康灏辨槸IOC鍜孉OP銆傚叧浜嶪OC鍜孉OP鐨勭煡璇嗙偣鎷撳睍濡備笅锛欼OC锛欼OC锛屽彟澶栦竴绉嶈娉曞彨DI锛圖ependency Injection锛夛紝鍗充緷璧栨敞鍏ャ傚畠骞朵笉鏄竴绉嶆妧鏈疄鐜帮紝鑰屾槸涓绉嶈璁℃濇兂銆傚湪浠讳綍涓涓湁瀹為檯寮鍙戞剰涔夌殑绋嬪簭椤圭洰涓紝鎴戜滑浼氫娇鐢ㄥ緢澶氱被鏉ユ弿杩板畠浠壒鏈夌殑鍔熻兘锛屽苟涓旈氳繃绫讳笌绫讳箣闂寸殑鐩镐簰鍗忎綔鏉ュ畬鎴愮壒瀹氱殑...
  • spring妗嗘灦涓殑涓ゅぇ鏍稿績鎬濇兂鏄粈涔
    绛旓細spring妗嗘灦涓殑涓ゅぇ鏍稿績鎬濇兂鏄IoC鍜孉OP銆侷oC锛堟帶鍒跺弽杞級鎵璋撴帶鍒跺弽杞紝鍙涓涓被灏嗗畠鍐呴儴鐘舵佺殑鎺у埗鏉冧氦缁欏叾浠栨満鍒舵潵瀹屾垚銆傚氨鏄▼搴忎腑涓嶅垱寤哄璞★紝鍙湪閰嶇疆鏂囦欢涓紝鎻忚堪濡備綍鍒涘缓瀹冧滑鐨勬柟寮忋傚湪浠g爜涓紝涓嶇洿鎺ヤ笌瀵硅薄鍜屾湇鍔¤繛鎺ワ紝鍦ㄩ厤缃枃浠朵腑鎻忚堪鍝釜缁勪欢闇瑕佸摢椤规湇鍔°侫OP锛堥潰鍚戝垏闈㈢紪绋嬶級 鎵璋撻潰鍚戝垏闈㈢紪绋...
  • 瑙i噴Spring涓璉OC, DI, AOP
    绛旓細ioc灏辨槸鎺у埗缈昏浆鎴栨槸渚濊禆娉ㄥ叆銆傞氫織鐨勮灏辨槸濡傛灉鍦ㄤ粈涔堝湴鏂归渶瑕佷竴涓璞★紝浣犺嚜宸变笉鐢ㄥ幓閫氳繃new 鐢熸垚浣犻渶瑕佺殑瀵硅薄锛岃屾槸閫氳繃spring鐨bean宸ュ巶涓轰綘闀跨敓杩欐牱涓涓璞°aop灏辨槸闈㈠悜鍒囬潰鐨勭紪绋嬨傛瘮濡傝浣犳瘡鍋氫竴娆″鏁版嵁搴撴搷浣滐紝閮借鐢熸垚涓鍙ユ棩蹇椼傚鏋滐紝浣犲鏁版嵁搴撶殑鎿嶄綔鏈夊緢澶氱被锛岄偅浣犳瘡涓绫讳腑閮借鍐欏叧浜庢棩蹇...
  • 缁嗚亰Spring-
    绛旓細1銆佷粈涔堟槸Spring Spring灏辨槸涓涓猨ava鍐欑殑妗嗘灦锛屼娇鐢╦ava璇█寮鍙戠殑锛 杞婚噺绾х殑锛 寮婧愮殑妗嗘灦銆 鍙互鍦╦2se銆乯2ee椤圭洰涓兘鍙互浣跨敤銆係pring鏍稿績鎶鏈細 ioc锛 aop Spring鍙堝彨鍋氾細瀹瑰櫒锛 spring浣滀负瀹瑰櫒锛 瑁呯殑鏄痡ava瀵硅薄銆 鍙互璁﹕pring鍒涘缓java瀵硅薄锛 缁欏睘鎬ц祴鍊笺係pring浣滅敤锛 瀹炵幇瑙h﹀悎锛 瑙e喅java瀵硅薄...
  • Spring妗嗘灦IOC鍜孉OP瑕佹庝箞鐞嗚В?
    绛旓細IoC灏辨槸瀵硅薄鐨勫垱寤猴紝渚濊禆閮界敱Spring鍙婇厤缃枃浠舵帶鍒讹紱AOP灏辨槸缁熶竴鐨勭粰涓浜涚被浼肩殑鏂规硶鍔犱笂鍚屾牱鐨勫姛鑳斤紝姣斿鏃ュ織锛屼簨鍔°係pring 妗嗘灦鏄竴涓垎灞傛灦鏋勶紝鐢 7 涓畾涔夎壇濂界殑妯″潡缁勬垚銆係pring 妯″潡鏋勫缓鍦ㄦ牳蹇冨鍣ㄤ箣涓婏紝鏍稿績瀹瑰櫒瀹氫箟浜嗗垱寤恒侀厤缃拰绠$悊 bean 鐨勬柟寮忋傜粍鎴 Spring 妗嗘灦鐨勬瘡涓ā鍧楋紙鎴栫粍浠讹級閮藉彲浠ュ崟鐙...
  • ioc鍜宎op鐨勫師鐞嗛潰璇
    绛旓細4銆丄OP鐨勫簲鐢ㄥ満鏅細璁ㄨAOP鐨勫簲鐢ㄥ満鏅紝渚嬪鏃ュ織璁板綍銆佷簨鍔$鐞嗐佹ц兘鐩戞帶绛夈傛寚鍑篈OP鑳藉閫氳繃鍦ㄤ笉鏀瑰彉鍘熸湁绋嬪簭閫昏緫鐨勬儏鍐典笅锛屽杩欎簺妯垏鍏虫敞鐐硅繘琛岀粺涓鐨勭鐞嗗拰澶勭悊銆5銆佽嚜宸辩殑鐞嗚В鍜岀粡楠岋細璇存槑鑷繁瀵IOC鍜孉OP鐨勭悊瑙e拰瀹為檯搴旂敤缁忛獙銆傚彲浠ュ垎浜嚜宸卞湪椤圭洰涓娇鐢Spring妗嗘灦瀹炵幇IOC鍜孉OP鐨勬渚嬶紝浠ュ強濡備綍閫氳繃IOC鍜...
  • java涓殑Spring閲岄潰鐨刬oc鍜宎op鏈変粈涔堝尯鍒?浠栦滑閮芥湁浠涔堢敤?
    绛旓細涔熷氨鏄锛Spring鐨処OC璐熻矗绠$悊鍚勭瀵硅薄鐨勫垱寤恒佹竻闄や互鍙婂畠浠箣闂寸殑鑱旂郴銆AOP鏄寚闈㈠悜鍒囬潰缂栫▼锛堜篃鍙潰鍚戞柟闈級锛屽彲浠ラ氳繃棰勭紪璇戞柟寮忓拰杩愯鏈熷姩鎬佷唬鐞嗗疄鐜板湪涓嶄慨鏀规簮浠g爜鐨勬儏鍐典笅缁欑▼搴忓姩鎬佺粺涓娣诲姞鍔熻兘鐨勪竴绉嶆妧鏈備竴鑸敤浜庝簨鍔$鐞嗐佹潈闄愭帶鍒躲侀敊璇鐞嗙瓑鍚勭涓氬姟涓叡鍚屾х殑涓滆タ銆
  • 扩展阅读:spring ioc di ... 怎么理解spring的ioc和aop ... spring ioc底层原理 ... spring ioc和aop的面试题 ... spring ioc和aop原理 面试 ... 谈谈对ioc和aop的理解 ... springboot的ioc和aop ... spring aop实现原理 ... spring ioc是什么 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网