理解的话我们需要脱离Spring去看面相对象设计原则。

依赖倒置(DIP)原则是面向对象设计的主要实现机制之一。

它要求我们依赖接口编程,而不是依赖实现编程。尽量引用层次高的抽象层类,即使用接口和抽象类的形式进行变量类的声明、参数返回类型声明,以及数据类型的转换等。

但当我们在依赖抽象层编程时,需要将抽象类设置具体实例化以后的对象引用。

故引入控制反转(IoC)设计原则。控制反转是为了将具体对象的创建过程交由一个统一容器进行管理,降低代码耦合度,其关键在于容器(如Spring)。

而控制反转(IoC)的实现方法主要有两种:依赖注入(DI)和依赖查找(DL)。

依赖注入(DI)又存在常见四种方式:构造注入(构造函数)、设值注入(setter)、接口注入(对外提供传递具体实现的方法,但参数类型为抽象类型)、注解注入(外部容器扫描注解,关联引用,如:@Autowired)

依赖查找更加主动,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。(如:Spring的ApplicationContext)

最后AOP的主要目的在于扩展、修改原有代码行为而不修改代码本身,而是通过“切入点”规范指定哪些代码需要修改。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,运行期间在内存中动态生成代理类,如Java本身的Proxy动态代理,以及CGLIB等(Spring Aop使用此类方式);二是采用静态织入的方式,在运行前(如编译期间)织入代码(如AspectJ存在编译前、编译后、加载时三种织入方式)。

有帮到你的点赞、收藏一下吧

需要更多教程,微信扫码即可

ioc,di,aop详解相关推荐

  1. Spring4 AOP详解

    Spring4 AOP详解 第一章Spring 快速入门并没有对Spring4 的 AOP 做太多的描述,是因为AOP切面编程概念不好理解.所以这章主要从三个方面详解AOP:AOP简介(了解),基于注 ...

  2. Spring AOP详解(转载)所需要的包

    上一篇文章中,<Spring Aop详解(转载)>里的代码都可以运行,只是包比较多,中间缺少了几个相应的包,根据报错,几经百度搜索,终于补全了所有包. 截图如下: 在主测试类里面,有人怀疑 ...

  3. Spring AOP详解(http://sishuok.com/forum/posts/list/281.html)

    三6.5  AspectJ切入点语法详解 6.5.1  Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接 ...

  4. Spring+IOC(DI)+AOP概念及优缺点

    Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应 ...

  5. Java依赖注入(DI)实例详解

    Java依赖注入模式允许我们摆脱硬编码,使我们的应用更加松耦合.增强扩展性以及可维护性.通过依赖注入我们可以降低从编译到运行时的依赖性. Java依赖注入 Java的依赖注入仅仅通过理论是很难解明白的 ...

  6. spring IOC DI AOP

    IOC bean工厂 getbean(String):Object 三种方式 核心是一个map单例 双重加锁校验 DI 构造参数 *实例工厂方法和静态工厂方法 原型bean缓存多次利用 循环依赖问题 ...

  7. Spring源码分析之BOP/IOC/DI/AOP

    Spring是什么? 轻量级:零配置编程.API使用简单 面向Bean:只需要编写普通的对象 轻耦合:充分利用AOP(面向切面)的思想 设计模式:使用java中经典的设计模式 面向Bean-BOP:通 ...

  8. Spring3.0 AOP 详解

    一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度 ...

  9. Spring学习(八)AOP详解

    本文借鉴:Spring学习 一.一个例子 在上面的例子中,包租婆的核心业务就是签合同,收房租,那么这就够了,灰色框起来的部分都是重复且边缘的事,交给中介商就好了,这就是 AOP 的一个思想:让关注点代 ...

最新文章

  1. QEMU,一个快速的和便捷的动态翻译器(论文译文)
  2. 数据结构C#版笔记--树与二叉树
  3. 计算机系统的可靠性可以用什么来表示,系统分析师考试计算机系统的可靠性指标...
  4. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
  5. HTML作业-保护环境-保护地球
  6. c#开发Mongo笔记第五篇
  7. Jetty 和tomcat 比较研究初探
  8. Java继承的基本概念及其限制(基础语法二)
  9. 如何去掉CAD教育版打印戳记
  10. CS188-Project 4
  11. linux超级块编辑,在EXT4 linux系统上模拟丢失的超级块错误
  12. 酸辣土豆丝的做法你知道几个?
  13. bat获取管理员权限运行
  14. Endnote 导出中英文参考文献到Word
  15. 好未来谢华亮:AI 在教育行业中的应用
  16. 解决浏览器被毒霸篡改问题
  17. html5一键打包成苹果软件,GDB苹果网页一键打包工具如何使用?GDB苹果网页一键打包工具安装使用教程...
  18. idea快速搭建ssm框架
  19. Problem A: 算法4-5:求子串位置的定位函数
  20. 信息系统项目管理师 - 信息系统项目管理基础

热门文章

  1. BBC纪录片任正非谈创业:华为是谁?
  2. 618“后高考经济”数据:3C数码依旧是毕业季的首选礼品
  3. 华为鲁勇:华为5G专利数量全球第一 比美国所有企业还多
  4. 微博开始动手了:禁言关闭六神磊磊等50个头部账号
  5. 菜鸟篇之Java入门学习【ZT】
  6. 女程序员也会有35岁的危机焦虑吗?
  7. android 使用外部字体
  8. python的顶级库_三大用于数据科学的顶级Python库
  9. mysql intt默认值_MySQL如何处理隐式默认值
  10. sample语言词法分析_Go 译文之词法分析与解析 Part Three