spring IOC和AOP的理解

简介

Spring的IoC容器是spring的核心,spring AOP是spring框架的重要组成部分

我们在使用Spring框架的过程中,其实就是为了使用IOC(依赖注入)和AOP(面向切面编程),这两个是Spring的灵魂。主要用到的设计模式有工厂模式和代理模式。IOC就是典型的工厂模式,通过sessionfactory去注入实例;AOP就是典型的代理模式的体现

IOC(Inverse of Control):控制反转,也可以称为依赖倒置

IOC负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期

实现:https://blog.csdn.net/qq_36042938/article/details/109677630

  • 依赖

所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B

  • 倒置

因为A必须要有B,才可以调用B,如果不倒置,意思就是A主动获取B的实例:B b = new B(),这就是最简单的获取B实例的方法(当然还有各种设计模式可以帮助你去获得B的实例,比如工厂、Locator等等),然后你就可以调用b对象了,所以,不倒置,意味着A要主动获取B,才能使用B;

倒置就是A要调用B的话,A并不需要主动获取B,而是由其它人自动将B送上门来。

举例:买衣服,如果你想买一件衣服,不倒置流程:你需要衣服;你做汽车去商城;在商城买你需要的衣服,倒置流程:你需要衣服;告知商家你需要的衣服;商家送货上门

IOC容器就相当于商城,在下面代码中,你无需自己创建UserService对象(Spring作为背后无形的手,把UserService对象通过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!),当然咯,我们也可以使用注解来注入。Spring依赖注入的实现技术是:动态代理

package org.leadfar.web;  
public class UserAction{  
     private UserService userService;  
     public String login(){  
          userService.valifyUser(xxx);  
     }  
     public void setUserService(UserService userService){  
          this.userService = userService;  
     }  
}  

AOP:即面向切面编程

AOP的好处就是你只需要关注你的核心逻辑,其它事情可以交给切面类去处理,达到一种可配置的、可插拔的程序结构,增加代码的可维护性

从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),所以,Spring在你访问数据库之前,自动帮你开启事务,当你访问数据库结束之后,自动帮你提交/回滚事务!

将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去

Spring中 AOP代理由Spring的 IoC容器负责生成、管理,其依赖关系也由 IoC容器负责管理。因此,AOP代理可以直接使用容器中的其他 Bean实例作为目标,这种关系可由 IoC容器的依赖注入提供。Spring默认使用 Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了。当需要代理的类不是代理接口的时候,Spring自动会切换为使用 CGLIB代理,也可强制使用 CGLIB

猜你喜欢

转载自blog.csdn.net/qq_36042938/article/details/111030153