Spring的IOC,DI和AOP

spring的优点

①IOC和DI降低了组件之间的耦合性 ,让程序员更专注于业务逻辑

②容器提供了众多的辅助类,能加快应用的开发

③spring对于主流的应用框架提供了集成支持,如hibernate,mybatis,Struts等

④spring属于低侵入式设计,代码的污染极低

⑤容器提供了AOP技术,利用它可以方便的实现权限拦截等功能

⑥创建对象默认是单例的,不需要再使用单例模式进行处理

⑦使用Spring构建的应用程序易于单元测试。

⑧Spring能够帮助我们真正意义上实现针对接口编程。

spring的IOC和DI

在传统的程序开发中,一个类如果需要用到另外一个类的功能,常常采用组合(也就是new 对象)或者使用工厂方法(工厂方法最终也是需要new) 的方式。这样类与类之间的耦合度变高了。

IOC(Inversion of Control)控制反转,DI(Dependency Injection)依赖注入,其实两者本质上是没有区别的

例如:在A类中调用B类的方法,那么我们就称 A依赖B,B为被依赖(对象),相信这点大家能够理解。

在spring中,B的实例对象被看成Bean对象,这个Bean对象由spring容器进行创建和管理,如此一来,A获取B的实例对象就不是由自己主动去获取,而是被动接受spring给它设值,那么,这个主动变为被动,就可以理解为“控制反转”。

而另一种说法,从spring容器的角度上看,它负责把A的依赖对象B(B是被依赖对象)注入给了A,所以我们可以理解为“依赖注入”

达到的效果:

你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类。

 

依赖注入的两种方式:

set方法注入和有参构造注入

Spring的IOC,DI和AOP_第1张图片

Spring的IOC,DI和AOP_第2张图片

Spring的IOC,DI和AOP_第3张图片

Spring的IOC,DI和AOP_第4张图片

IOC和DI的优点

降低了组件间的耦合度,增强了可维护性和复用性

 

IOC的底层原理

工厂模式+反射  可以采用dom4j来解析xml配置文件

我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

Spring的IOC,DI和AOP_第5张图片

spring的aop

aop的使用场景

Spring的IOC,DI和AOP_第6张图片

 

AOP,面向切面编程,不用修改源代码就可以扩展功能,底层使用动态代理实现

 

AOP中有三个重要的部分:

切入点(即类中实际增强的方法,aspectj可以和spring一起进行aop操作,可以通过在spring配置文件中使用表达式来配置切入点)

增强(又称为通知,消息)扩展的功能称为增强,通知包括前置通知,在方法之前执行,后置通知,在方法之后通知,异常通知,方法出现异常时通知,最终通知,在后置通知之后执行,环绕通知,在方法之前之后通知)

切面,切入点和增强的结合,就是把增强应用到具体方法上面的过程.

2 常用的表达式

execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)   -->访问修饰符可以为public,protected和private

(1)execution(* cn.itcast.aop.Book.add(..))  -->(..)表示可以有参数

(2)execution(* cn.itcast.aop.Book.*(..))

(3)execution(* *.*(..))

(4) 匹配所有save开头的方法 execution(* save*(..))

 

spring aop的使用方法①配置文件②使用注解(不太了解)

Spring的IOC,DI和AOP_第7张图片

Spring的IOC,DI和AOP_第8张图片

Spring的IOC,DI和AOP_第9张图片

 

你可能感兴趣的:(框架)