Spring核心思想IOC与AOP

Spring中IOC与DI思想
概述:
       IOC即Inversion of Control理解为"控制反转"也可以理解为"依赖倒置",它是一种程序设计的思想,所谓的"控制反转"就是我们在没有使用框架以前,当我们要去创建一个对象的时候我们通常会使用new关键字去手动的创建一个对象出来,而我们使用了Spring框架以后我们就可以将我们创建对象的控制权进行转移,也就是将这种创建对象的权利转移到我们Spring中的IOC容器,由IOC容器在我们系统运行时进行动态的装载或者注入我们需要的对象,而其中动态的向某个对象提供它所需要的其他对象就是靠DI(依赖注入)来实现。**底层通过反射实现。**
        
实现过程:
        IOC容器实际上就是个map(key,value)集合,里面存的是各种对象(在xml里配置的bean节点||repository、service、controller、component),在项目启动的时候会读取配置文件里面的bean节点,根据全限定类名使用反射new对象放到map里;同时也会扫描到那些打上述注解的类并再次通过反射的方式将那些新创建的对象放到map容器里完成Spring中对象的创建。此时这个时候map里就有各种对象了,接下来我们在代码里需要用到里面的对象时,再通过DI方式注入(可以通过autowired、resource等注解或者通过xml里bean节点内的ref属性,项目启动的时候会读取xml节点ref属性根据id注入,同时也会扫描这些注解,根据类型或id(对象名)进行注入)。Spring中的IOC与DI的关系像是一种接口与实现类的关系。

举例说明:
        通常情况下,假如你有一天在家里口渴了,要喝水,那么你可以到你小区的小卖部去,告诉他们,你需要一瓶水,然后小卖部给你一瓶水!这本来没有太大问题,关键是如果小卖部很远,那么你必须知道:从你家如何到小卖部;小卖部里是否有你需要的水;你还要考虑是否开着车去;等等等等,也许有太多的问题要考虑了。也就是说,为了一瓶水,你还可能需要依赖于车等等这些交通工具或别的工具,问题是不是变得复杂了?那么如何解决这个问题呢?
        解决这个问题的方法很简单:小卖部提供送货上门服务,凡是小卖部的会员,你只要告知小卖部你需要什么,小卖部将主动把货物给你送上门来!这样一来,你只需要做两件事情,就可以得到你想要的结果。①向小卖部注册为会员。②告诉小卖部你需要什么。分解这两部其实就是我们Spring中IOC和DI所完成的操作,分别是加载对象到容器Map、注入对象所需要依赖实体对象操作。
        

Spring中Aop思想:
        AOP(Aspect Oriented Programming),即面向切面编程,可以说是 OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP 引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过 OOP 允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在 OOP 设计中,它导致了大量代码的重复,而不利于各个模块的重用。AOP 技术恰恰相反,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。使用"横切"技术,AOP 把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。AOP 核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组 API 提供横切功能。比如,一个日志模块可以被称作日志的 AOP 切面。根据需求的不同,一个应用程序可以有若干切面。在 Spring AOP 中,切面通过带有@Aspect 注解的类实现。

总结:
        Spring IoC借助于依赖注入机制,减轻了组件之间的依赖关系,同时也大大提高了组件的可移植性,组件得到了更多的重用机会。借助于Spring AOP,使得开发者能声明式、基于元数据访问企业级服务,AOP合理补充了OOP技术,Spring AOP合理地补充了Spring IoC容器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值