Spring框架的两大核心(ioc和aop)

一、ioc:控制反转(Inversion of Control)思想

1.1、由spring来负责控制对象的生命周期和对象间的关系(SSM框架中的依赖关系)通过注解扫描的方式(底层使用反射)装入一个

1.2、作用:解耦(入下图)

这就是没使用ioc思想下的关系图(耦合度太高)

1.3、控制反转思想前提 —— 依赖注入(DI)(一般都是set注入)

Dependency Injection,说的是创建对象实例时,同时为这个对象注入它所依赖的属性。相当于把每个bean与bean之间的关系交给容器管理。而这个容器就是spring。
例如我们通常在 Service 层注入它所依赖的 Dao 层的实例;在 Controller层注入 Service层的实例。
DI 给对象属性赋值的过程叫做依赖注入!

spring中采取set注入给对象属性赋值如下

<bean id="p1" class="com.zqs.bean.Person"><property name="id" value="001"><property name="name" value="赵青松"><peoperty hobbly value="打篮球">
</bean>

这里已经实现了控制反转了

1.4、控制反转思想的实现

也就是依赖倒置的思想

依赖倒置前:
eg:(造飞机):先造螺丝钉-造使用螺丝钉的配件-造使用配件的组件-造使用组件的飞机


飞机上有螺丝钉这一参数,导致后面调用都会传这个参数,直到最后

依赖倒置后
**eg:**先造机身-根据机身造组件-根据组件造配件-根据配件造螺钉

依赖倒置后,只需要造飞机不管后面的参数,最后再改最底层的(螺丝钉)

以上就是依赖倒置的概念(我们调用方法时不需要考虑下一层的是怎么构造的,只需要new 下一层对象,只需要维护最底层即可)

1.5、spring中的控制反转

spring 则是通过 IOC 容器来创建对象,也就是说我们将创建对象的控制权交给了 IOC 容器。我们可以用一句话来概括 IOC:
IOC 让程序员不在关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建、初始化、销毁等工作交给spring容器来做。

二、aop:面向切面编程思想

2.1、概述:

散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切


AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证日志打印事务处理。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

2.2、实现方式

这里就会使用到代理模式(动态代理)

1、JDK代理动态代理: 先创建一个代理类实现一个接口(InvocationHandler),然后调用invoke方法,返回一个结果(真实对象的方法+新加的方法),然后调用Proxy的静态方法Proxy.newProxyInstance(),创建一个代理对象,然后就可以调用方法了;
UserDao ud = (UserDao) Proxy.newProxyInstance(UserDaoImpl.class.getClassLoader(), UserDaoImpl.class.getInterfaces(), handler);
这里得到的代理对象必须要有一个UserDao的接口.

2、CGLib代理: Spring底层用的CGLIB代理!
如果没有最终共同实现的的接口的话就要用到CGLIB代理。

程序运行后给真实对新(目标对象)生成一个子类重写父类方法(父类方法+增强的代码),相当于一个代理对象

具体如下

//真实对象(目标对象)* public class UserDaoImpl {public int addUser(User u) {System.out.println("正在新增user对象数据库:"+u);return 1;}public int deleteUser(int id) {System.out.println("正在删除user编号为:"+id);return 1;}public int updateUser(User u) {System.out.println("正在更新user对象数据库:"+u);return 1;}}``````java
//拦截类
public class UserMethodInterceptor implements MethodInterceptor{Transaction tx;public UserMethodInterceptor(Transaction tx) {this.tx = tx;
}//拦截的方法
public Object intercept(Object o, Method method, Object[] agrs, MethodProxy methodProxy) throws Throwable {tx.openTransaction();Object result = methodProxy.invokeSuper(o, agrs);tx.commitTransaction();return result;
}
}
public class Transaction {/*** 开启 事务*/public void openTransaction(){System.out.println("开启Mysql事务");}/*** 提交 事务*/public void commitTransaction(){System.out.println("提交Mysql事务");}}
@Test
public void test1() throws Exception{// 在指定目录下生成动态代理类System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\classcglib");UserMethodInterceptor interceptor=new UserMethodInterceptor(new Transaction());Enhancer enhancer=new Enhancer();//设置父类是谁,根据父类生成子类enhancer.setSuperclass(UserDaoImpl.class);//一旦调用代理对象的方法enhancer.setCallback(interceptor);//生成了一子类  代理类  多态!UserDaoImpl ud = (UserDaoImpl)enhancer.create();System.out.println("此处的UD是代理对象(目标类的子类)!!!!");//com.bruce.dao.impl.UserDaoImpl$$EnhancerByCGLIB$$f9eec3e4@2471cca7// com.bruce.dao.impl.UserDaoImpl$$EnhancerByCGLIB$$f9eec3e4System.out.println(ud.getClass().toString());int count = ud.addUser(new User(1, "老王", "1234", "美女"));System.out.println(count);System.out.println("--------------------------------------------------------");int result = ud.deleteUser(1);System.out.println(result);
}

Spring的IOC和AOP思想相关推荐

  1. Spring:IOC和AOP

    Spring:IOC和AOP 一. IOC (1) 引入 (2) 定义 (3) 作用 (4) 实现 (5) DI依赖注入 二. AOP (1) 概念 (2) Spring中的AOP (3) 入门案例 ...

  2. Spring中IOC和AOP的详细解释(转)

    原文链接:Spring中IOC和AOP的详细解释 我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂 ...

  3. Spring框架IOC和AOP的实现原理

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  4. Spring框架IOC和AOP的实现原理(概念)

    IoC(Inversion of Control) (1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控.控制权由应用代码中 ...

  5. 彻底学会Spring的IOC和AOP——理论+实操

    目录 1 IOC 1.1 概念 1.2 底层原理 1.3 IOC容器 1.4 Bean管理:基于xml配置文件实现 1.5 两种类型的Bean 1.6 Bean的作用域 1.7 Bean的生命周期 1 ...

  6. Java 第一大框架:Spring 的 IoC 跟 AOP 雏形如何实现?

    Spring Spring make java more simple: Spring make java more modern: Spring make java more reactive: S ...

  7. Spring 的 IOC 和 AOP 简述

    首先IOC和AOP并不是Spring提出的,早在Spring之前就已经存在了,不过更偏向理论化,而Spring在技术层面将这两个理论做了很好的实现. 什么是IOC IoC: Inversion of ...

  8. 谈谈自己对Spring中IOC和AOP的理解

    Spring框架的核心思想主要是IOC和AOP的思想 IOC IOC概念 Spring中的IOC AOP AOP概念 百度百科的解释 个人理解 AOP思想 IOC IOC概念 所谓IOC即 Inver ...

  9. Spring框架系列之AOP思想

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.AOP概述 (1).什么是 AOP AOP 为 Aspect Oriented Progra ...

最新文章

  1. 《Web安全之机器学习入门》一 2.2 TensorFlow简介与环境搭建
  2. centos系统 anaconda3(python3)安装pygrib
  3. Java 异步编程:从 Future 到 Loom
  4. IOS 集成支付宝和邮件发送
  5. Seurat | 单细胞分析工具
  6. php什么是静态类,三.PHP静态类
  7. python下载指定页面的所有图片
  8. 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5
  9. 【Qt基础】2.Qt基础 窗口、资源、布局与控件
  10. java手机牧场物语,Minecraft Java版 19w09a 发布
  11. linux 小度 驱动_在Linux下使用小度WiFi
  12. uboot源码修改之支持DM9000
  13. 思必达软件督查督办软件技术开发与设计
  14. 数组转这种格式 county_list:{ 110101: “东城区“, 110102: “西城区“, 110105: “朝阳区“, 110106: “丰台区“,
  15. MOGRT动态图标模板 爱情元素手绘爱心特效pr视频模板
  16. 科研写作——常见句式(十一)
  17. 用 python 脚本,把当前目录及子目录下的 wav 音频文件转换为 flac 格式
  18. MOS驱动自举电容和限流电阻的选取
  19. linux+手机+gps,Linux环境下利用GPS+蓝牙实现移动定位
  20. 通过西部世界来盘点近来人工智能研究的发展

热门文章

  1. MATLAB 折线图手绘风格(漫画风格)修饰器
  2. anyRTC-语音连麦demo上线
  3. redis数据库错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persis
  4. matlab安装完后可以删除安装包吗,安装与卸载
  5. uniapp 在 H5、App、微信小程序中使用 svga 格式动画详细示例教程,附插件源码及示例源码(常见于网页直播刷礼物特效功能)
  6. java 通过路径下载文件_JAVA中实现根据文件路径下载文件
  7. 2021性价比高的蓝牙耳机,六款高性价比蓝牙耳机点评
  8. <NUC> 安装Windows10系统
  9. 华为mate30什么时候能更新鸿蒙系统,华为mate30什么时候更新鸿蒙系统
  10. 06.AOV网和图的拓扑排序