Spring学习笔记(IOC,DI和AOP)

IOC: Inversion of Control,控制反转, 控制权从应用程序转移到框架(如IOC容器),是框架共有的特性。

对于IOC的理解,可以把IOC看作是一个生产和管理bean对象的容器。原本程序中我们要手动自己创建(new)的对象统统交给Spring的IOC容器帮我们创建。同时这就意味着,要产生的单例的bean,这个对象的生命周期也是有IOC容器管理。

Spring中IOC的三种实现方式:

1.属性注入,或叫做set方法注入;
2.构造方法注入;
3.注解注入,可能因为方便的原因,这种方式免去了臃肿的配置,所以比较常用。

Spring的有点主要是根据IOC和AOP实现的,之前有简单提到AOP的实现思想,这些都是针对工厂模式和代理模式的友好封装。IOC主要解决了代码的高度耦合问题,AOP将面向切面的编程思想做出了最好的解释和应用。

这里顺带简单解释一下Spring中的IOC,DI,AOP:

       IOC就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。在实际应用中,Spring通过配置文件(xml或者properties)指定需要实例化的java类(类名的完整字符串),包括这些java类的一组初始化值,通过加载读取配置文件,用Spring提供的方法(getBean())就可以获取到我们想要的根据指定配置进行初始化的实例对象。

       AOP就是将程序功能中的频繁出现或者与主业务逻辑代码相关度不高的代码抽离出来,通过切面编程的方式在想要调用的时候引入调用的思想。而这种思想并不是只限于Spring和java,AOP(面向切面)和OOP(面向对象)一样都是一种编程思想,这种思想的实现机制在Spring中便是应用了java的动态代理和java的反射。在实际编程中,我们通常会遇到一些交叉业务逻辑(比如:日志,事务,安全等等),这是我们就可以封装一个封面,然后注入到目标对象(具体的业务逻辑)中去。ps:很多方法都会抛出异常信息,这是我们就可以写一个拦截器,在这个类中实现记录错误日志的功能,再在Spring的xml配置文件中配置一个对这些要记录日志的方法的AOP拦截器,在这个方法执行后调用这个拦截器来记录日志。这样就不用每次抛出异常都要手动的去单独处理记录,提高了程序的内聚性。这种在调用某个方法之前/后想要自动执行一系列自定义操作的就是AOP思想。
总结:

IOC即控制反转,一种将控制权转移的设计模式,由传统的程序控制转移到容器控制;

DI即依赖注入,将相互依赖的对象分离,在Spring的配置(注解)中描述它们之间的依赖关系,这些依赖关系也只在使用时才被建立。

AOP即面向切面,一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。

Spring的AOP和IOC都是为了解决代码的耦合度的实际应用,使得代码的重用度变高,便于维护。但这些都不是Spring中特有的,我们可以说Spring将它们应用的更灵活。

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

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

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

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

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

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

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

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

IOC和DI的优点

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

IOC的底层原理
工厂模式+反射  可以采用dom4j来解析xml配置文件

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

spring的aop

aop的使用场景

Spring学习笔记(IOC,DI和AOP)

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)

Spring学习笔记(IOC,DI和AOP)

Spring学习笔记(IOC,DI和AOP)

   原文链接:https://blog.csdn.net/qq_36071795/article/details/83792071

原文链接:https://www.cnblogs.com/ldy-blogs/p/8479013.html

原文链接:https://www.cnblogs.com/java-263/p/9982422.html

原文链接:https://www.jianshu.com/p/9cb11d34f242