IOC 控制反转

IOC主要两种设计模式:1.BeanFactory为代表的容器

2.ApplicationContext为代表的应用上下文容器

IOC两种设计模式区别:1. BeanFactory提供最基本的IOC容器功能,是IOC容器的基本形式

2. ApplicationContext是IOC容器的高级表现形式,如支持不同的信息源,支持应用事件等。

IOC容器理解:1. IOC容器的底层数据结构就是一个Map(数组+单向链表+红黑树)集合,保存着各个Bean的定义,然后通过依赖注入等方式将这些Bean管理起来

2. 将 JavaBean 的控制权由开发者转交给 Spring 容器,由 Spring 容器全权维护该 JavaBean

依赖注入方式:1.构造器注入  2.属性注入  3.接口注入

BeanFactory设计模式实例

Student实体类:

StudentFactory实体类:

SpringXml文档配置文件:

测试(静态工厂):

结果:

测试(普通工厂):

结果:

ApplicationContext设计模式实例(类全名)

实体类:

Xml文档:

测试:

结果:

OOP面向对象

扩展:OOA(面向对象分析)   OOD(面向对象设计)

面向对象:

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 .
缺点:性能比面向过程差

面向过程:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展.

面向对象三大特性:

  1. 封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。
  2. 继承:提高代码复用性;继承是多态的前提。
  3. 多态:父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。

五大基本原则:(了解就行)

  1. 单一职责原则SRP(Single Responsibility Principle):类的功能要单一,不能包罗万象(一个类里面内容别太多)
  2. 开放封闭原则OCP(Open-Close Principle):一个模块对于拓展是开放的,对于修改是封闭的(增、查可行 删、改不行)
  3. 里式替换原则LSP(the Liskov Substitution Principle LSP):子类可以替换父类出现在父类能够出现的任何地方
  4. 依赖倒置原则DIP(the Dependency Inversion Principle DIP):高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。(小依赖于大 大不应该依赖于小)
  5. 接口分离原则ISP(the Interface Segregation Principle ISP):设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。(把客户要求细分采用多个接口,原则上不允许把所有功能写在一个接口上)

AOP面向切面编程

拓展:1.AOP的出现并不是要完全替代OOP,而仅是作为OOP的有益补充

2.AOP的应用场合比较受限,一般只适合于那些具有横切逻辑的应用场合:性能测试、访问控制、日志记录、事务管理等等

AOP理解:AOP通过横向抽取机制,将一个业务的每一个步骤分别抽取出来,形成多个类的多个方法,其中有一个方法是核心方法,其他各个方法作为辅助方法为了再实现这个业务功能,可以再将这些不同类的不同方法凑成一起即可,而除了那个核心业务之外的所有的方法,都可以以切面的方式加入到目标方法中(这里的目标方法,也就是真正的业务核心方法)

自我理解:AOP 就是对选中方法(核心方法)添加功能

AOP术语:

  1. 连接点(Joinpoint)
  2. 切点(Pointcut)
  3. 增强(Advice)
  4. 目标对象(Target)
  5. 引介(Introduction)
  6. 织入(Weaving)
  7. 代理(Proxy)
  8. 切面(Aspect)

自我理解:连接点就是特定位置,切点就是特定方法,增强就是准备织入的一段程序代码(某个方法)切面就是由切点加增强形成的新方法(描述不准确)

AOP两种实现方式(XML文档配置 注解配置)实例:

XML文档配置

pom.xml文档配置

目标类(核心服务)局部:

辅助服务类

AOP配置:

配置目标类的对象:

配置辅助业务日志的对象:

AOP配置:

测试:

结果:

注解配置

pom.xml文档配置一样

编辑spring的配置文件

编写提供核心服务的目标类:

编写提供辅助服务的类

测试:

结果:

IOC AOP OOP拙见相关推荐

  1. 面试必会系列 - 1.8 Spring IOC / AOP原理

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  2. Spring (Bean, IoC, AOP, SpringMVC)

    Spring - Bean, IoC, AOP, SpringMVC Spring 1. 核心容器 1.1 Spring-beans 1.1.1 Bean 的配置 1.1.1.1 自动装配 1.1.1 ...

  3. Spring IOC AOP详细笔记

    spring 文章目录 spring 什么是spring spring框架作用: ioc aop spring基本配置 IOC掌握什么? IOC创建对象方式 Spring配置 别名配置 bean配置 ...

  4. Spring(IOC+AOP)

    Spring 容器(可以管理所有的组件(类))框架:        核心关注:IOC和AOP: Test:Spring的单元测试模块: spring-test-4.0.0.RELEASE Core C ...

  5. IOC AOP 设计模式

    IOC AOP 不是什么技术而是一种设计模式  学习 IOC AOP 其实是在学习一种思想. 1.IOC IOC其实是 将对象的创建和获取提取到外部.由外部IOC容器提供需要的组件. 看下面代码: p ...

  6. IoC+AOP的简单实现

    原文地址为: IoC+AOP的简单实现 对EnterLib有所了解的人应该知道,其中有一个名叫Policy Injection的AOP框架:而整个EnterLib完全建立在另一个叫作Unity的底层框 ...

  7. Spring原理/SpringMVC原理/IOC/AOP原理

    Spring原理/SpringMVC原理/IOC/AOP原理 我的微型IOC框架实现 我的微型IOC框架实现 当你打开这本书的时候我要告诉你的第一句话就是认真把前言读完,因为前言概括的本书的大纲以及思 ...

  8. 对IOC,AOP的理解

    (1)  ioc,意思是Inversion of control,(反转控制),控制反转,就是交换控制权的意思.现在一般不使用这个词,一般使用dependency injection(依赖注入).依赖 ...

  9. springaop事务逻辑原理_太狠了!阿里大牛手写的Spring核心面试笔记:IOC+AOP+MVC+事务...

    Spring作为现在最流行的java 开发技术,其内部源码设计非常优秀.如果你不会Spring,那么很可能面试官会让你回家等通知. Spring是什么? 有一个工地,几百号人在用铁锹铲子挖坑. 如果开 ...

最新文章

  1. OpenCV 使用方向梯度直方图估计图像旋转角度
  2. java分享第六天(冒泡排序)
  3. 下载服务器 linux系统,如何搭建Linux服务器
  4. JQuery 总结(3) jQuery 各种事件
  5. go语言中利用匿名函数和闭包实现文件名修改
  6. sum怎么用python_python sum()函数和.sum(axis=0)函数的使用
  7. Grasshopper and Rhino: Python Scripting Grasshopper和Rhino:Python脚本 Lynda课程中文字幕
  8. matlab 离散系统稳定性,基于LMI的离散系统非脆弱H∞滤波器设计(Matlab,程序)
  9. 计算机学部毕业设计答疑记录,毕业论文指导记录怎么写?毕业论文指导记录12篇...
  10. Spring Boot Admin
  11. VCS/Questa SIM 使用流程及Makefile
  12. 杭州自己缴纳社保五险条件
  13. COMMENT的简单介绍,,及在Navicat中COMMENT的使用方法
  14. 绘画教程:动漫角色中男生女生脸部画法
  15. 获取微信中的音频方法
  16. 生活其实很有意思 ... ...
  17. 计算机毕业设计-生鲜配送超市商城系统
  18. 机器学习之朴素贝叶斯(一):朴素贝叶斯的介绍、概率基础(拉普拉斯平滑)、sklearn朴素贝叶斯实现API、朴素贝叶斯分类的优缺点、文本的特征工程
  19. 快速排序算法 ( 挖坑法 ) ------- C语言
  20. 报错:Unsupported major.minor version 52.0 (jar包对不同JDK版本的兼容性问题:)

热门文章

  1. 机器学习_深度学习毕设题目汇总——行人
  2. XStream使用记录
  3. BaiduFaceApi.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
  4. React进阶 - React脚手架
  5. idea快速新建flink工程
  6. 【毕业N年系列】 毕业第一年
  7. Javascript学习笔记(犀牛书1、2章)
  8. 5.电影搜索之 自动填充,也叫autocomplete、搜索建议!
  9. netty实现简单的rpc,支持服务集群
  10. 微信直播怎么弄?知识干货都在这里了