spring - ioc和aop
1.程序中为什么会用到spring的ioc和aop
2.什么是IOC,AOP,以及使用它们的好处,即详细回答了第一个问题
3.原理
关于1:
a:我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经不知不觉的和 new的对象耦合了,而我们通常都是更高层次的抽象模块调用底层的实现模块,这样也就产生了模块依赖于具体的实现,这样与我们JAVA中提倡的面向接口面向抽象编程是相冲突的,而且这样做也带来系统的模块架构问题。很简单的例子,我们在进行数据库操作的时候,总是业务层调用DAO层,当然我们的DAO一般 都是会采用接口开发,这在一定程度上满足了松耦合,使业务逻辑层不依赖于具体的数据库DAO层。但是我们在使用的时候还是会new一个特定数据库的DAO 层,这无形中也与特定的数据库绑定了,虽然我们可以使用抽象工厂模式来获取DAO实现类,但除非我们一次性把所有数据库的DAO写出来,否则在进行数据库 迁移的时候我们还是得修改DAO工厂类,所以我们就思考新的方法
b:
1 public class Hello implements IHello { 2 3 public void sayHello(String name) { 4 // TODO Auto-generated method stub 5 System.out.println("Hello " + name); 6 } 7 8 }
如上图,假设我们要在方法的开始和结束处加上一些业务逻辑,大家想到的最直接的方法,就是在方法前面和后面加上一些代码,如日志,假如不能改变原来的方法了,那你又会想到继承Hello类,重写sayHello方法,如下
public class Hello2 extends Hello {public void sayHello(String name) {// TODO Auto-generated method stubsysstem.out.println("方法前的逻辑");super.sayHello("。。。。。。");}}
可能你又会想到,组合的方式
public class Hello3 implements IHello {private IHello helloDao = new Hello();public void sayHello(String name) {// TODO Auto-generated method stubsysstem.out.println("方法前的逻辑");helloDao .sayHello("。。。。。。");}}
假设现在要把这个日志功能加入到20个不同方法的前面,可以考虑把那个日志功能抽离出来封装成一个类的方法,但是那样还是要组合新建20个类,组合20次,如下
public class LogInterceptor {public void before() {System.out.println("method before");} }public class Hello3 implements IHello {private IHello helloDao = new Hello();public void sayHello(String name) {// TODO Auto-generated method stubnew LogInterceptor().before();helloDao .sayHello("。。。。。。"); } }public class hello4 implements 其他接口 {//需要新建类private IHello qitaDao = new 其他业务类();//需要组合旧的类public void doHello(String name) {// TODO Auto-generated method stubnew LogInterceptor().before();helloDao .sayHello("。。。。。。"); } }。。。20次
这样肯定不可靠。我们想新的思路,可以写一个配置文件,在每个需要加日志逻辑的里面,例Hello类的所有方法上配上那个日志类的方法,这样就不用新建20个类,组合20次旧的类,但是问题又来了,程序不会返回你重新组合的那个类(即那个新组合而成的动态类),我们需要思考新的方法
关于2:
IOC:Inversion of Control 控制反转,也叫(Dependency Injection)依赖注入,上述a的逻辑使用IOC,就是DAO接口的实现不再是业务逻辑层调用工厂类去获取,而是通过容器(spring)来自动的为我们的业务层设置DAO的实现类,这样整个过程就反过来,以前是我们业务层主动去获取DAO,而现在是DAO主动被设置到业务逻辑层中来了,这也就是反转控制的由来。通过IOC,我们就可以在不修改任何代码的情况下,无缝的实现数据库的换库迁移
AOP:Aspect Oriented Programming 面向切面编程,上述b的逻辑就使用AOP,就可以解决,他帮助我们生成动态的代理类,织入新的业务逻辑,如事务,日志等等
关于3:
IOC原理:
AOP原理:
运行结果:
开始了--Hello 张三 结束了--开始了--李四 GoodBye! 结束了--
转载于:https://www.cnblogs.com/baiduligang/p/4247354.html
spring - ioc和aop相关推荐
- 自己动手实现的 Spring IOC 和 AOP - 下篇
1. 背景 本文承接上文,来继续说说 IOC 和 AOP 的仿写.在上文中,我实现了一个很简单的 IOC 和 AOP 容器.上文实现的 IOC 和 AOP 功能很单一,且 IOC 和 AOP 两个模块 ...
- 自己动手实现的 Spring IOC 和 AOP - 上篇
1. 背景 我在大四实习的时候开始接触 J2EE 方面的开发工作,也是在同时期接触并学习 Spring 框架,到现在也有快有两年的时间了.不过之前没有仿写过 Spring IOC 和 AOP,只是宏观 ...
- Spring IoC 和 AOP
Spring IoC 和 AOP spring框架java开发的行业标准. spring全家桶. Web:Spring Web MVC/Spring MVC,Spring Web Flux 持久层:S ...
- 【Spring 源码阅读】Spring IoC、AOP 原理小总结
Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...
- 浅谈 Spring IOC和AOP
浅谈 Spring IOC和AOP IOC 控制反转 以前创建对象的主动权和时机是由于自己把握的,现在将这种权利转移到Spring容器中,并且根据配置文件去创建对象管理对象 ioc的注入方式有三种:构 ...
- BeanPostProcessor —— 连接Spring IOC和AOP的桥梁
之前都是从大Boss的视角,来介绍Spring,比如IOC.AOP. 今天换个视角,从一个小喽啰出发,来加深对Spring的理解. 这个小喽啰就是, BeanPostProcessor (下面简称 B ...
- Spring IOC 和 AOP 概览
IOC(控制反转) IoC(Inversion of Control,控制倒转).所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系. 在没有IOC时,我们 ...
- 再品Spring Ioc 和 Aop
文章目录 Spring好处 IOC 基于XML和基于注解开发 基于XML开发 基于注解开发 配置类 扫包+注解 依赖注入 AOP 写在前面,这篇文章写的时候我的SSM已经学过一遍了,回头来看真的受益匪 ...
- 吊打面试官系列之--吃透Spring ioc 和 aop (中)
目录 Spring SpringBean的五个作用域 SpringBean的生命周期 创建过程 销毁过程 AOP的介绍和使用 AOP的介绍 AOP的三种织入方式 操作讲解 AOP的主要名词概念 Adv ...
最新文章
- .NET(C#)连接各类数据库-集锦
- jetson nano 用 tensorrt 运行 nanodet(kitti数据集)
- 混合密度网络(MDN)进行多元回归详解和代码示例
- 统计分析与spss的应用第五版数据_#统计分析与SPSS应用# 4.1.3 SPSS频数分析的扩展功能...
- 最终的动画函数封装(2)
- ERP CRM与SCM整合过程中的知识转移
- AS(Autonomous System)
- Science:这种算法,也许将创造更公平的人工智能
- 一般的模式匹配算法(求子串位置)
- springboot整合多数据源
- 表贴电阻尺寸与什么有关_什么是LED点光源屏?常见的LED点光源规格和型号
- 【进阶修炼】——改善C#程序质量(4)
- installshield使用教程
- Linux服务器上修改深度学习代码
- 学it需要学历吗_学IT需要什么学历
- (转载)Windows文件系统过滤驱动开发教程
- 速学TypeScript-精简划重点手册-下册
- The package javax.swing is not accessible错误的三种解决办法,亲测有效
- 三维叉乘怎么算_小学数学心算速算:多位数乘一位数
- 旋转矩阵列向量的物理含义
热门文章
- 简单粗暴Tensorflow 2.0
- winapi里的createthread函数 和linux,Windows API---CreateThread函数
- NLP︱高级词向量表达(二)——FastText(简述、学习笔记)
- 关系网络理论︱细讲中介中心性(Betweeness Centrality)
- python爬取公众号,用最简单的方式爬虫
- 红帽专家谈 Ceph 与 Gluster 开源存储路线
- php连接Access实例
- ViT (Vision Transformer) ---- SimpleRNN + Attention
- 同一个事务里面对同一条数据做2次修改_MySQL事务与MVCC如何实现的隔离级别
- python生成的字符画怎么查看_通过python将图片生成字符画