认识Spring框架
Spring框架是Java应用最广的框架,其成功来源于理念,而不是技术本身。理念包括IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。
什么是Spring
- Spring是一个轻量级的DI(Dependency Injection,依赖注入)/IoC和AOP容器的开源框架。
- Spring提倡以“最少侵入”的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载Spring。
- 适用范围:任何Java应用 | 根本使命:简化Java开发
- Spring正在涉足和创新的领域有移动开发、社交API集成、NoSQL数据库、云计算以及大数据等。
Spring常用术语
- 框架:是能完成一定功能的半成品
- 非侵入式设计:无需继承框架提供的任何类。这样在更换框架时,之前写过的代码几乎可以继续使用。
- 轻量级和重量级:轻量级一般就是非侵入性的、所依赖的东西非常少、资源占用非常少、部署简单等等。重量级正好相反。
- JavaBean:即符合JavaBean规范的Java类。
- POJO:即Plain Old Java Objects,简单老式Java对象。它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不集成或不实现任何其它Java框架的类或接口。
注:一个Spring组件可以是任意形式的POJO。
- 容器:从程序设计角度看就是装对象的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
Spring的优势
- 低侵入、低耦合(降低组件之间的耦合度,实现软件各层之间的解耦)
- 声明式事物管理(基于切面和惯例)
- 方便集成其他框架(如MyBatis、Hibernate)
- 降低Java开发难度
- Spring框架中包括了J2EE三层的每一层的解决方案(一站式)
Spring能帮我们做什么
- Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。
- Spring面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
- Spring能非常简单的帮我们管理数据库事务。
- Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
- Spring能方便的与Java EE(如Java Main、任务调度)整合,与更多技术整合(比如缓存框架)。
- Spring的框架结构:
- Data Access/Integration层包含有JDBC、ORM、OXM、JMS和Transaction模块。
- Web层包含了Web、Web-Servlet、WebSocket、Web-Porlet模块。
- AOP模块提供了一个符合AOP联盟标准的面向切面编程的实现。
- Core Container(核心容器)包含有Beans、Core、Context和SpEL模块。
- Test模块支持使用JUnit和TestNG对Spring组件进行测试。
Spring Ioc 和 DI 简介
IoC:Inversion of Control(控制反转)
- 读作“反转控制”更好理解,是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
- 正控:若要使用某个对象,需要自己去负责对象的创建。
- 反控:若要使用某个对象,只需要从Spring容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架。
- 好莱坞法则:Don’t call me, I’ll call you.
一个例子:
总结:
- 传统方式:通过new关键字主动创建一个对象
- IoC方式:直接从Spring那里去获取一个对象。(对象的创建权本从自己手里交给了Spring)
DI:Dependency Injection(依赖注入)
- 指Spring创建兑现搞得过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象。
- IoC和DI其实是同一个概念的不同角度描述,DI相对IoC而言,明确描述了被注入对象依赖IoC容器配置依赖对象。
Ioc是如何实现的
- 读取标注或者配置文件
- 使用反射的API,基于类名实例化对应的对象实例
- 将对象实例通过构造函数或者setter,传递给引用变量
Srping AOP 简介
IoC是Spring的核心,AOP是Spring最为重要的功能之一,在数据库事务中AOP被广泛使用。
AOP(Aspect Oriented Program,面向切面编程)
面向切面编程吧功能分为核心业务功能和周边功能。
- 核心业务:比如登录,增加数据,删除数据等都叫核心业务
- 周边功能:比如性能统计,日志,事务管理等等。
周边功能在Spring的面向切面编程AOP思想里,即被定义为切面。
AOP把核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能“编织”在一起,这就叫AOP。
AOP 的目的
AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少几桶的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
AOP 当中的概念
- 切入点(Pointcut):在哪些类,在哪些方法上切入(where)
- 通知(Advice):在方法执行的什么时候(when:方法前、后、前后)实际做什么(what:增强的功能)
- 切面(Aspect):切面=切入点+通知,就是在什么时机,什么地方,做什么增强。
- 织入(Weaving):把切面加入到对象,并创建出代理对象的过程。(由Spring来完成)
AOP 编程
- 在某一packet下创建某一service类,进行处理、服务。
- 在xml文件中装配该service bean。
- 在TestSpring中编写测试代码,运行。
- 在packet:aspect下准备日志切面LoggerAspect类。
- 在xml文件中声明业务对象和日志切面(配置AOP)。
- 再次运行TestSpring中的测试代码,代码并没有改变,但在业务方法运行之前和运行之后,都分别输出了日志信息。
文章转自https://www.cnblogs.com/wmyskxz/p/8820371.html