IOC和AOP的理解 (持续更新)

IOC: 控制反转,其本质其实就是将创建bean的使用权交给了ioc容器来控制的,ioc负责bean的创建和依赖注入,其创建的实质个人觉得就是Java的反射机制来反向生成bean对象。那么为什么ioc要这么做呢?其实是为了降低程序代码之间的解耦性,也可以说是减低了各个程序之间的依赖性。其实ioc就好像一个大工厂,你想要什么对象的实例你都可以找ioc容器拿,自然而然解耦性就大大降低了。至于怎么拿那就要通过配置XML文件来进行处理的,当然这样配置肯定大大减低了效率,因此spring有推出了注释来减低xml配置的编写,的确很好用。

AOP: 面向切面编程. 名字很是生动形象,把代码进行切面化,切面里面又可以填充新的东西。 其实在我目前看来,aop是通过匹配方法,在原方法的基础上增加新的功能,这在处理程序的安全性起到很好的作用。在处理方法的时候可以提前进行过滤,在得到方法参数的时候可以再添加数据处理,对数据进行更好的维护等等。其本质其实就是将原先已经写好的方法进行添加新的功能。的确也是个好东西。

注意: 但配置XML或者添加了注解,那么编译器都会执行,就好比但注解实现和XML都配了,那么编译器会全部执行,等同于执行两次。

AOP: 

有五个增强方式: 前置增强、后置增强、环绕增强(类似于try)、异常抛出增强(相当于catch)、最终增强(相当于finally)

 必须进行声明:   若没有声明则注解的均无效 有时会收缓存影响

 需要声明: 

注解实现(前置增强):

等同于XML配置:

注解实现(后置增强):

 

等同于XML配置(其余同上):

注意:由于后置增强会有目标方法的返回值做为returning的属性值,当目标方法(切入点)没有指定参数的时候,值为null.

注解实现(环绕增强): 可以通过proceed方法来控制目标方法的执行

 等同于XML配置(其余同上):

注解实现(异常抛出增强):

等同于XML配置(其余同上):

 

注解实现(最终增强):

  等同于XML配置(其余同上):

 

最后他们执行的顺序(没有异常):

有异常:由于前面一个代码中环绕异常中存在catch因此会直接被环绕给抓住,所有要想看异常执行的顺序则这能去除环绕中的try ... catch来进行实现

 由上我们可以初略的得出一些结论:  

  1. 注释和XML写法基本相类似,注释就是用来帮助我们更加高效的书写代码,基础的XML配置 注释都帮我们配置好。

  2. 在XML中配置与配置的先后有关: 

在注释文件中同类别的收到代码的上下文顺序的影响而不同类别有其固定的顺序:  环绕增强前 => 前置增强 => 切点 => 最终增强 => 后置增强,当切点存在异常的时候后置增强就不会执行了,当然环绕中切点执行之后的代码也不会执行。如下图:

    2.1:正常处理

      

    2.2:异常处理

      

 注意:除了Around注解的方法可以传ProceedingJionPoint 外,别的几个都不能传这个类。但是普通的数据类型是不限制的。注解的方法的返回值也不限制,可以自由限制。

 在aop中校验不通过如何不让程序进入核心代码?

1. @Before : 这个注解只有在异常时才不会执行切点。正常@Before无法阻止当前线程进入连接点。

异常时:

2. @Around: 我们一般使用这个来进行校验的,因为它通过ProceedingJionPoint 类中封装的代理方法proceed()来控制着切点的执行时机。

 

 

 

 

 

 

 

 

原文地址:https://www.cnblogs.com/ashen137/p/11808765.html