Spring控制反转IOC与依赖注入DI和AOP切面编程

IOC控制反转

        IoC叫控制反转,英文Inversion of Control,控制反转就是把 由程序代码直接操作的对象第调用权交给容器处理,通过容器实现对象组件的装配和管理。说白了就是 对组件对象控制权的转移,从程序转移到外部容器,由容器创建对象并管理对象间依赖关系。

        控制反转的技术大大促进了代码间的松耦合。一个对象依赖的其他对象会通过被动的方式传递进来,而不是自己去创建或者查找依赖对象,而是容器在对象初始化时不等对象请求就主动将依赖传递给他了,如此使得层与层之间脱耦,增加运行效率,便于维护。

       

如上图中,Spring不仅可以实例化对象,还可以为对象属性赋值,这边是控制反转。

DI依赖注入

依赖:所有的java应用都是由一些相互协作的对象构成的,Spring把这种互相协作的关系叫做依赖。如:A组件调用了B组件的方法,则称A组件依赖于B组件。

举例如下:

任何一个应用都是由若干个类组成,他们相互协作来完成特定的业务逻辑,通常,每个对象负责管理与自己相互协作的对象的引用,如此将会导致代码高度耦合,并难以测试。

以上代码中Person类里面new了一个User对象,这使得User和Person紧密耦合,如果又很多类中都使用了User对象,都需要new一个User类,倘若User类改变了,将会导致用到User实例的类都需要跟着改动。

下面通过Spring依赖注入解决这个问题,Spring通过上下文(Application Context)装载Bean,并负责将其创建和组装,

AOP切面

AOP切面编程是一种横切技术,说白了就是凌驾于个组件之上,例如日志、事务这些操作,很多业务组件都会要用到,总不能每个组件都去开发一遍代码,而AOP横切的作用就能不影响业务代码,不去影响组件功能,就偷偷的对他们产生了影响。

如上图中各个组件服务都要用到日志功能,很多服务要用到事务管理,AOP就可以使这些服务模块化,让这项组件具有高内聚性及更加专注自身业务,

这样就使得 各模块化的功能报过了核心业务层,核心业务不需要知道他们的存在,这样事务和日志关注点与业务逻辑就分离开了。

通过Spring的配置可以不需要去关注玩之前之后的活动,只需要专注玩。

猜你喜欢

转载自blog.csdn.net/m0_37601917/article/details/85247662