理解Spring的AOP和IOC实现原理

一、什么是Spring

        spring 是什么?
        Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:
反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核 ,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

一、AOP

AOP(面向切面)是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程(OOP)。
AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模块化。
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任,例如事务处理、日志管理、权限控制等,封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

使用AOP的好处

  • 降低模块的耦合度
  • 使系统容易扩展
  • 提高代码复用性

AOP的基本概念

  • 连接点(JoinPoint):需要在程序中插入横切关注点的点,连接点可能是在类初始化、方法调用、字段调用或处理异常等等。Spring中只支持方法执行连接点。
  • 切入点(Pointcut):一组相关连接点的集合。
  • 通知(Advice):在连接点上执行的行为,增强提供了在AOP中需要在切入点所选择的连接点处进行扩展现有行为的手段。包括前置增强(before advice)、后置增强 (after advice)、环绕增强 (around advice)。
  • 切面(Aspect):通知和切入点的结合。
  • 织入(Weaving):织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程。
  • 代理(Proxy):通过代理方式来对目标对象应用切面。AOP代理可以用JDK动态代理或CGLIB代理实现。
  • 目标对象(Target):需要被织入关注点的对象。即被代理的对象。

理解Spring的AOP和IOC实现原理_第1张图片

实现AOP的主要设计模式就是动态代理。

二、IOC

        IOC(控制反转)就是依赖倒置原则的一种代码设计思路。就是把原先在代码里面需要实现的对象创建、对象之间的依赖,反转给容器来帮忙实现。这里我举一个就是一个男的要找女朋友,可以两种方式:1、自己去大街上找一个合适的;2、可以去找婚姻介绍所,即一个中介,让中介所找对象。你觉得哪种方式方便?IOC就是第二种,容器相当于那个中介所。永远记住,所谓的框架都是为了解耦和重用。这里就是为了解耦,提高代码的可用性。
        Spring IOC容器通过xml,注解等其它方式配置类及类之间的依赖关系,完成了对象的创建和依赖的管理注入。实现IOC的主要设计模式是工厂模式。

我下面代码解释一下:项目结构:

理解Spring的AOP和IOC实现原理_第2张图片

pom.xml



    4.0.0

    com.itheima
    day02_eesy_02account_xmlioc
    1.0-SNAPSHOT
    jar

    
        
            org.springframework
            spring-context
            5.0.2.RELEASE
        
        
            org.springframework
            spring-test
            5.0.2.RELEASE
        
        
            commons-dbutils
            commons-dbutils
            1.4
        

        
            mysql
            mysql-connector-java
            5.1.6
        

        
            c3p0
            c3p0
            0.9.1.2
        

        
            junit
            junit
            4.12
        
    

 bean.xml



    
    
        
        
    

    
    
        
        
    

    
    
        
        
    

    
    
        
        
        
        
        
    

通过配置文件完成注入。

你可能感兴趣的:(Spring,spring,代理模式,java,项目架构,intellij,idea)