Spring、AOP、IOC/DI回顾

考研面试可能要用,先回顾回顾

认识spring

spring是Java应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括Ioc(Inversion of Control,控制反转)AOP(Aspect Oriented Programming,面向切面编程)。

什么是Spring:

  1. Spring是一个轻量级的DI / IOC和AOP容器的开源框架
  2. Spring提倡以“最少侵入”的方式来管理应用中的代码,意味着我们可以随时安装或者卸载Spring
    适用范围:任何Java应用
    Spring的根本使命:简化Java开发
    目前Spring正在涉足和创新的领域:移动开发、社交API集成、NoSQL数据库、云计算以及大数据

Spring常用术语:

  1. 框架:完成一定功能半成品:项目的整体框架、一些基础功能、规定了类和对象如何创建、如何协作等
  2. 非侵入式设计: 无需继承框架提供的任何类(更换框架时,之前写过的代码几乎可以继续使用)
  3. 轻量级和重量级: 轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等,其实就是比较容易使用,而重量级正好相反
  4. JavaBean: 符合JavaBean规范的Java类
  5. POJO: Plain Old Java Objects,简单老化Java对象。它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它其它Java框架的类或接口
    注意:bean 的各种名称——虽然 Spring 用 bean 或者 JavaBean 来表示应用组件(类),但并不意味着 Spring 组件必须遵循 JavaBean 规范,一个 Spring 组件可以是任意形式的 POJO。
  6. 容器: 装对象的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期

spring的优势

  1. 低侵入 / 低耦合
  2. 声明式事物管理(基于切面和惯例)
  3. 方便集成其他框架(如MyBatis、Hibernate)
  4. 降低 Java 开发难度
  5. Spring 框架中包括了 J2EE 三层的每一层的解决方案(一站式)

Spring 能帮我们做什么

①.Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系
②.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制
③.Spring 能非常简单的帮我们管理数据库事务
④.Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
⑤.Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
⑥.Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)

Spring 的框架结构

在这里插入图片描述

  1. Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。
  2. Web层包含了Web、Web-Servlet、WebSocket、Web-Porlet模块。
  3. AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。
  4. Core Container(核心容器): 包含有Beans、Core、Context和SpEL模块。
  5. Test模块支持使用JUnit和TestNG对Spring组件进行测试。

Spring IoC 和 DI 简介

IoC:Inverse of Control(控制反转)

  1. 读作 “反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理
  2. 正控: 若要使用某个对象,需要自己去负责对象的创建(通过new)
  3. 反控: 若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架(交给了Spring)
  4. 好莱坞法则: Don’t call me ,I’ll call you

一个例子
控制反转显然是一个抽象的概念,我们举一个鲜明的例子来说明。

在现实生活中,人们要用到一样东西的时候,第一反应就是去找到这件东西,比如想喝新鲜橙汁,在没有饮品店的日子里,最直观的做法就是:买果汁机、买橙子,然后准备开水。值得注意的是:这些都是你自己“主动”创造的过程,也就是说一杯橙汁需要你自己创造。

然而到了今时今日,由于饮品店的盛行,当我们想喝橙汁时,第一想法就转换成了找到饮品店的联系方式,通过电话等渠道描述你的需要、地址、联系方式等,下订单等待,过一会儿就会有人送来橙汁了。

请注意你并没有“主动”去创造橙汁,橙汁是由饮品店创造的,而不是你,然而也完全达到了你的要求,甚至比你创造的要好上那么一些。

DI:Dependency Injection(依赖注入)

  1. 指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象

总结:IoC 和 DI 其实是同一个概念的不同角度描述,DI 相对 IoC 而言,明确描述了“被注入对象依赖 IoC 容器配置依赖对象”

Spring AOP 简介

如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用。

AOP 即 Aspect Oriented Program 面向切面编程

首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。

  1. 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
  2. 所谓的周边功能,比如性能统计,日志,事务管理等等

周边功能在 Spring 的面向切面编程AOP思想里,即被定义为切面

在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP

AOP 的目的

AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性

AOP 当中的概念:

  1. 切入点(Pointcut)
    在哪些类,哪些方法上切入(where
  2. 通知(Advice)
    在方法执行的什么实际(when:方法前/方法后/方法前后)做什么(what:增强的功能)
  3. 切面(Aspect)
    切面 = 切入点 + 通知,通俗点就是:在什么时机,什么地方,做什么增强
  4. 织入(Weaving)
    把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)

转载来源处,个人感觉写的很不错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值