spring的ioc和aop都是什么?? Spring中的ioc和aop有什么作用?为什么要用ioc和...

java\u4e2d\u7684Spring\u91cc\u9762\u7684ioc\u548caop\u6709\u4ec0\u4e48\u533a\u522b\uff1f\u4ed6\u4eec\u90fd\u6709\u4ec0\u4e48\u7528\uff1f

IOC\u7684\u57fa\u672c\u6982\u5ff5\u662f\uff1a\u4e0d\u521b\u5efa\u5bf9\u8c61\uff0c\u4f46\u662f\u63cf\u8ff0\u521b\u5efa\u5b83\u4eec\u7684\u65b9\u5f0f\u3002\u5728\u4ee3\u7801\u4e2d\u4e0d\u76f4\u63a5\u4e0e\u5bf9\u8c61\u548c\u670d\u52a1\u8fde\u63a5\uff0c\u4f46\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u63cf\u8ff0\u54ea\u4e00\u4e2a\u7ec4\u4ef6\u9700\u8981\u54ea\u4e00\u9879\u670d\u52a1\u3002Spring\u5bb9\u5668\u8d1f\u8d23\u5c06\u8fd9\u4e9b\u8054\u7cfb\u5728\u4e00\u8d77\u3002\u4e5f\u5c31\u662f\u8bf4\uff0cSpring\u7684IOC\u8d1f\u8d23\u7ba1\u7406\u5404\u79cd\u5bf9\u8c61\u7684\u521b\u5efa\u3001\u6e05\u9664\u4ee5\u53ca\u5b83\u4eec\u4e4b\u95f4\u7684\u8054\u7cfb\u3002AOP\u662f\u6307\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff08\u4e5f\u53eb\u9762\u5411\u65b9\u9762\uff09\uff0c\u53ef\u4ee5\u901a\u8fc7\u9884\u7f16\u8bd1\u65b9\u5f0f\u548c\u8fd0\u884c\u671f\u52a8\u6001\u4ee3\u7406\u5b9e\u73b0\u5728\u4e0d\u4fee\u6539\u6e90\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\u7ed9\u7a0b\u5e8f\u52a8\u6001\u7edf\u4e00\u6dfb\u52a0\u529f\u80fd\u7684\u4e00\u79cd\u6280\u672f\u3002\u4e00\u822c\u7528\u4e8e\u4e8b\u52a1\u7ba1\u7406\u3001\u6743\u9650\u63a7\u5236\u3001\u9519\u8bef\u5904\u7406\u7b49\u5404\u79cd\u4e1a\u52a1\u4e2d\u5171\u540c\u6027\u7684\u4e1c\u897f\u3002

\u8fd8\u662f\u9700\u8981\u53bb\u4e86\u89e3\uff0c\u591a\u770b\u770b\u4e66\uff01
IOC\uff1a\u63a7\u5236\u53cd\u8f6c\uff0c\u662f\u4e00\u79cd\u8bbe\u8ba1\u6a21\u5f0f\u3002\u4e00\u5c42\u542b\u4e49\u662f\u63a7\u5236\u6743\u7684\u8f6c\u79fb\uff1a\u7531\u4f20\u7edf\u7684\u5728\u7a0b\u5e8f\u4e2d\u63a7\u5236\u4f9d\u8d56\u8f6c\u79fb\u5230\u7531\u5bb9\u5668\u6765\u63a7\u5236\uff1b\u7b2c\u4e8c\u5c42\u662f\u4f9d\u8d56\u6ce8\u5165\uff1a\u5c06\u76f8\u4e92\u4f9d\u8d56\u7684\u5bf9\u8c61\u5206\u79bb\uff0c\u5728spring\u914d\u7f6e\u6587\u4ef6\u4e2d\u63cf\u8ff0\u4ed6\u4eec\u7684\u4f9d\u8d56\u5173\u7cfb\u3002\u4ed6\u4eec\u7684\u4f9d\u8d56\u5173\u7cfb\u53ea\u5728\u4f7f\u7528\u7684\u65f6\u5019\u624d\u5efa\u7acb\u3002\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u4e0d\u9700\u8981NEW\u4e00\u4e2a\u5bf9\u8c61\u4e86\u3002

AOP\uff1a\u9762\u5411\u5207\u9762\uff0c\u662f\u4e00\u79cd\u7f16\u7a0b\u601d\u60f3\uff0cOOP\u7684\u5ef6\u7eed\u3002\u5c06\u7cfb\u7edf\u4e2d\u975e\u6838\u5fc3\u7684\u4e1a\u52a1\u63d0\u53d6\u51fa\u6765\uff0c\u8fdb\u884c\u5355\u72ec\u5904\u7406\u3002\u6bd4\u5982\u4e8b\u52a1\u3001\u65e5\u5fd7\u548c\u5b89\u5168\u7b49\u3002\u8fd9\u4e2a\u7b80\u5355\u6765\u8bf4\u5c31\u662f\u53ef\u4ee5\u5728\u4e00\u6bb5\u7a0b\u5e8f\u4e4b\u524d\u6216\u8005\u4e4b\u540e\u505a\u4e00\u4e9b\u4e8b\u3002


Spring \u7684AOP\u548cIOC\u90fd\u662f\u4e3a\u4e86\u89e3\u51b3\u7cfb\u7edf\u4ee3\u7801\u8026\u5408\u5ea6\u8fc7\u9ad8\u7684\u95ee\u9898\u3002\u4f7f\u4ee3\u7801\u91cd\u7528\u5ea6\u9ad8\u3001\u6613\u4e8e\u7ef4\u62a4\u3002
\u4e0d\u8fc7AOP\u548cIOC\u5e76\u4e0d\u662fspring\u4e2d\u7279\u6709\u7684\uff0c\u53ea\u662fspring\u628a\u4ed6\u4eec\u5e94\u7528\u7684\u66f4\u7075\u6d3b\u65b9\u4fbf

什么是IoC

Ioc—Inversion of
Control,即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”,那我们来深入分析一下:

控制是什么:传统Java
SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC
容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。

IoC能做什么

IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。

其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。

IoC和DI

DI—Dependency
Injection,即“依赖注入”:是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。

注:如果想要更加深入的了解IoC和DI,请参考大师级人物Martin Fowler的一篇经典文章《Inversion of Control
Containers and the Dependency Injection
pattern》,原文地址:http://www.martinfowler.com/articles/injection.html。

AOP:面向切面编程

什么是AOP:

概念:在软件业,AOP为Aspect Oriented
Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。(百度百科)

简单的说:就是将程序中重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。

AOP的作用和优势:

作用:从定义中来看,就是为了在程序运行期间,不修改源码对已有方法进行增强。

优势:减少重复代码 提交了开发效率 维护方便

实现方式: 就是动态代理的技术

具体的作用:实现事务的控制 日志 和 安全模块

想系统的学习编程可以来我这看看,希望对您有所帮助!~



楼上那位说概念了。我多说下。
IOC就是容器,把创建对象这些东西都放在容器里创建了。你可以把这东西理解成类似工厂模式。
aop就是切面。你可以理解成这个东西就是面对一个方法的,比如一个方法他是做读取数据库的这么个方法,那么在方法的执行的各种时刻,before after, afterrunning,around这些时刻做一些东西,比如在读之前我打印一行日志我准备读了,结束打印一行我读完了,报错的时候打印一个日志我出错了。当然也可以干别的,比如调用别的方法。大致就是这么理解就行了。

ioc是反向控制
AOP是面向切面编程

  • spring鐨刬oc鏄В鑰,aop鏄共浠涔堢殑
    绛旓細鑰屽鏋滃疄鐜颁竴涓唬鐞嗙被锛屽湪绫讳腑璋冪敤ObjectImpl锛岃繖鏍峰閮ㄨ闂唬鐞嗙被鏃朵細闂存帴璋冪敤ObjectImpl锛屽苟涓旀杩囩▼鍙互鎵╁睍鑰屼笉鐢ㄥ婧愪唬鐮丱bjectImpl杩涜淇敼銆spring 涓殑AOP灏辨槸鍩轰簬杩欑鍘熺悊銆侫OP涓細鍙戠敓澶氫釜閫昏緫澶嶅悎澶勭悊鐨勬儏鍐碉紝浣跨敤浠g悊绫昏兘鍑嗙‘鎵ц鐩爣绫讳腑瀹氫箟鐨勯昏緫鍗曞厓骞朵笖鎵╁睍鍏朵粬鐨勯昏緫鍗曞厓銆
  • spring ioc鍜宎op鐨勫師鐞嗘槸浠涔?
    绛旓細spring涓璱oc浣跨敤鐨勬槸鈥滅敓浜у伐鍘傗濓紝aop浣跨敤鐨勬槸鈥滃姩鎬佷唬鐞嗏濇兂鐭ラ亾鏇村寤鸿鍘荤湅涓涓 椹+鍏 鐨勭郴鍒楄棰戞暀绋嬨備富瑕佸簲鐢ㄤ簡java鐨勫弽灏勬妧鏈紝寰堥叿锛涘彲浠ユ牴鎹粰瀹氱殑鍙傛暟锛堜富瑕佹槸瀛楃涓诧級锛涘垱寤虹浉搴旂殑bean锛岃闂浉搴旂殑鏂规硶鎴栨瀯閫犲櫒浠ュ強鎴愬憳鍙橀噺锛涘叿浣撳簲鐢ㄥ彲浠ユ煡鐪嬪府鍔╂枃妗 java銆俵ang銆俽eflect鍖呬笅鐨凜onstructor锛...
  • ioc鍜宎op鐨勫尯鍒?
    绛旓細鍦ㄧ▼搴忎腑锛岃璋冪敤绫荤殑閫夋嫨鎺у埗鏉冧粠璋冪敤瀹冪殑绫讳腑绉婚櫎锛岃浆浜ょ粰绗笁鏂硅鍐炽傝繖涓涓夋柟鎸囩殑灏辨槸Spring鐨瀹瑰櫒銆IoC鍙﹁В锛屼緷璧栨敞鍏ワ紙Dependency Injection锛夛紝璋冪敤绫诲琚皟鐢ㄧ被鐨勪緷璧栧叧绯荤敱绗笁鏂规敞鍏ワ紝浠ョЩ闄よ皟鐢ㄧ被瀵硅璋冪敤绫荤殑寮曠敤銆2 aop锛岄潰鍚戝垏闈㈢紪绋(涔熷彨闈㈠悜鏂归潰)锛欰spect Oriented Programming(AOP),鏄...
  • 璇磋AOP鍜孖OC鐨勬蹇浠ュ強鍦spring涓鏄浣曞簲鐢ㄧ殑
    绛旓細鐜板湪涓句釜鐜板疄鐨勪緥瀛愭妸鍟 鐜板湪甯傚満涓婄殑ipad 閮芥槸涓嶈兘鎵撶數璇濈殑浣嗘槸鏈変竴绉嶄笢瑗垮彨鍋氣欒嫻鏋滅毊鈥樼殑涓滆タ 瀹夎杩涘幓鈥樺彲浠ヨipad鑳藉疄鐜版墦鐢佃瘽 杩欏氨鏄敤浜aop杩欑鎬濇兂瀹屾垚鐨 aop灏辨槸鎶婁笟鍔″綋浣滅鐘剁殑閭e効闇瑕佸姞鐐瑰姛鑳藉氨鍒囧紑 瀹夎杩涘幓鐒跺悗鎺ヨ捣鏉ャioc 姣旇緝绠鍗 鎰忔濆氨鏄 姣忎釜浜洪渶瑕佺殑瀵硅薄閮芥槸鎵惧埆浜鸿鐨 涔熷氨...
  • ioc鍜宎op鐨勫師鐞嗛潰璇
    绛旓細4銆丄OP鐨勫簲鐢ㄥ満鏅細璁ㄨAOP鐨勫簲鐢ㄥ満鏅紝渚嬪鏃ュ織璁板綍銆佷簨鍔$鐞嗐佹ц兘鐩戞帶绛夈傛寚鍑篈OP鑳藉閫氳繃鍦ㄤ笉鏀瑰彉鍘熸湁绋嬪簭閫昏緫鐨勬儏鍐典笅锛屽杩欎簺妯垏鍏虫敞鐐硅繘琛岀粺涓鐨勭鐞嗗拰澶勭悊銆5銆佽嚜宸辩殑鐞嗚В鍜岀粡楠岋細璇存槑鑷繁瀵IOC鍜孉OP鐨勭悊瑙e拰瀹為檯搴旂敤缁忛獙銆傚彲浠ュ垎浜嚜宸卞湪椤圭洰涓娇鐢Spring妗嗘灦瀹炵幇IOC鍜孉OP鐨勬渚嬶紝浠ュ強濡備綍閫氳繃IOC鍜...
  • Spring AOP瀹炵幇鍘熺悊鍒嗘瀽
    绛旓細Spring鐨鏍稿績鏄IOC涓嶢OP锛孖OC涓昏鏄緷璧栧叧绯荤殑绠$悊锛屼緷璧栨煡璇紝渚濊禆娉ㄥ叆锛屽湪涔嬪墠bean鐨勭敓鍛藉懆鏈熸枃绔犱腑宸茬粡瀵筨ean鐨勭敓鍛藉懆鏈熷仛浜嗙浉瀵瑰鐨勫垎鏋愶紝杩欓噷浠ュ墠鎺㈣涓婣OP鐨勫疄鐜板師鐞嗐傞瑙堜竴涓嬮厤缃枃浠 refresh -> obtainFreshBeanFactory -> refreshBeanFactory -> AbstractRefreshableApplicationContext.loadBean...
  • 涓轰粈涔堣鐢spring鐨処OC鍜孉OP
    绛旓細ioc灏辨槸鎺у埗缈昏浆鎴栨槸渚濊禆娉ㄥ叆銆傞氫織鐨勮灏辨槸濡傛灉鍦ㄤ粈涔堝湴鏂归渶瑕佷竴涓璞★紝浣犺嚜宸变笉鐢ㄥ幓閫氳繃new 鐢熸垚浣犻渶瑕佺殑瀵硅薄锛岃屾槸閫氳繃spring鐨bean宸ュ巶涓轰綘闀跨敓杩欐牱涓涓璞°aop灏辨槸闈㈠悜鍒囬潰鐨勭紪绋嬨傛瘮濡傝浣犳瘡鍋氫竴娆″鏁版嵁搴撴搷浣滐紝閮借鐢熸垚涓鍙ユ棩蹇椼傚鏋滐紝浣犲鏁版嵁搴撶殑鎿嶄綔鏈夊緢澶氱被锛岄偅浣犳瘡涓绫讳腑閮借鍐欏叧浜庢棩蹇...
  • spring鐨鎺у埗鍙嶈浆銆ioc銆aop浣撶幇鍦ㄥ摢閲?
    绛旓細鏈鍚庡湪鎬荤粨涓嬭繖涓や釜鍚嶈瘝銆傛帶鍒跺弽杞紝灏辨槸浜ゆ崲鎺у埗鏉冪殑鎰忔濓紝姣斿鎴戠被A闇瑕佺敤鍒扮被B鐨勬椂鍊欙紝鍏蜂綋鐨勫疄鐜版柟寮忔槸鍦ㄧ被B鐨勬煇涓柟娉曢噷锛屼篃灏辨槸璇寸被B鎺у埗鐫杩欎釜涓氬姟鐨勫叿浣撳疄鐜般傝岀幇鍦ㄧ敤IOC浠ュ悗锛岀被B浜ゅ嚭鎺у埗鏉冿紝绫籄鏉ヨ繘琛屾帶鍒讹紝绫籄閲屽彧闇瑕佽皟鐢ㄤ竴涓帴鍙g殑鏂规硶锛屼笉绠′綘杩欎釜鏂规硶鐨勫叿浣撳疄鐜版槸鐢辩被B鐨勫璞℃潵...
  • 涓轰粈涔堣鐢spring鐨処OC鍜孉OP
    绛旓細AOP鏄蒋浠跺紑鍙戞濇兂鍙戝睍鍒颁竴瀹氶樁娈电殑浜х墿銆備絾AOP鐨勫嚭鐜板苟涓嶆槸瑕佸畬鍏ㄦ浛浠OP锛岃屼粎浠呬綔涓篛OP鐨勬湁鐩婅ˉ鍏呫傝櫧鐒禔OP浣滀负涓椤圭紪绋嬫妧鏈凡缁忔湁寰堝骞寸殑鍘嗗彶锛屼絾涓鐩撮暱鏈熷仠鐣欏湪瀛︽湳棰嗗煙锛岀洿鍒Spring鐨鍑虹幇锛孉OP鎵嶄綔涓轰竴椤圭湡姝g殑瀹炵敤鎶鏈湪搴旂敤棰嗗煙寮鐤嗘墿鍦熴傚叧浜庝负浠涔堣浣跨敤AOP,涓嬮潰杩欎釜渚嬪瓙鍙互寰堝ソ鐨勮В閲娿傞鍏堬紝鎸夌収...
  • spring妗嗘灦鐨勭畝浠
    绛旓細Spring浣跨敤鍩烘湰鐨凧avaBean鏉ュ畬鎴愪互鍓嶅彧鍙兘鐢盓JB瀹屾垚鐨勪簨鎯呫傜劧鑰岋紝Spring鐨鐢ㄩ斾笉浠呴檺浜庢湇鍔″櫒绔殑寮鍙戙備粠绠鍗曟с佸彲娴嬭瘯鎬у拰鏉捐﹀悎鐨勮搴﹁岃█锛屼换浣旿ava搴旂敤閮藉彲浠ヤ粠Spring涓鍙楃泭銆係pring鏄竴涓交閲忕骇鐨勬帶鍒跺弽杞(IoC)鍜岄潰鍚戝垏闈(AOP)鐨勫鍣ㄦ鏋躲傝交閲忊斺斾粠澶у皬涓庡紑閿涓ゆ柟闈㈣岃█Spring閮芥槸杞婚噺鐨勩傚畬鏁寸殑...
  • 扩展阅读:spring ioc底层原理 ... 怎么理解spring的ioc和aop ... springboot干啥用的 ... springboot ioc aop ... spring ioc和aop原理 面试 ... spring boot三层架构 ... web前端三大主流框架 ... springboot框架 ... spring aop应用场景 ...

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