Spring框架的基本原理
Spring 框架概念
1)struts2 是 web 框架,hibernate 是 orm 框架
2)spring 是容器框架,主要负责创建 bean,维护 bean 之间的关系。
3)spring 可以管理 web 层,持久层,业务层,dao 层,spring 可以配置各个层的组件,并且维护各个层的关系。
Spring 框架包括 7 ⼤模块
核⼼容器:核⼼容器提供 Spring 框架的基本功能。核⼼容器的主要组件是 BeanFactory,它是⼯⼚模式的实现。BeanFactory 使⽤控制反转(IOC)模式将应⽤程序的配置和依赖性规范与实际的应⽤程序代码分开。
Spring 上下⽂:Spring 上下⽂是⼀个配置⽂件,向 Spring 框架提供上下⽂信息。Spring 上下⽂包括企业服务,例如 JNDI、EJB、电⼦邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将⾯向⽅⾯的编程功能集成到了 Spring 框架中。所以,可以很容易地使Spring 框架管理的任何对象⽀持 AOP。Spring AOP 模块为基于 Spring 的应⽤程序中的对象提供了事务管理服务。通过使⽤ Spring AOP,不⽤依赖 EJB 组件,就可以将声明性事务管理集成到应⽤程序中。
java的基本框架Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可⽤该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极⼤地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的⾯向 JDBC 的异常遵从通⽤的 DAO 异常层次结构。
Spring ORM:Spring 框架插⼊了若⼲个 ORM 框架,从⽽提供了 ORM 的对象关系⼯具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通⽤事务和 DAO 异常层次结构。
Spring Web 模块:Web 上下⽂模块建⽴在应⽤程序上下⽂模块之上,为基于 Web 的应⽤程序提供了上下⽂。所以,Spring 框架⽀持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的⼯作。
Spring MVC 框架:MVC 框架是⼀个全功能的构建 Web 应⽤程序的 MVC 实现。通过策略接⼝,MVC 框架变成为⾼度可配置
的,MVC 容纳了⼤量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring框架核⼼
核⼼就是控制反转(IOC),和⾯向切⾯(AOP)。
IoC(控制反转)
所谓 IoC(控制反转),对于 spring 框架来说,就是由 spring 来负责控制对象的⽣命周期和对象间的关系。
IoC 的⼀个重点(DI 依赖注⼊,DI 是 IOC 的实现⽅式)是在系统运⾏中,动态的向某个对象提供它所需要的其他对象(因此⼜叫DI)。如对象A 定义⼀个引⽤ B(对象),⾄于这个 B 对象怎么构造,何时构造,A 不需要知道。在系统运⾏时,spring 会在适当的时候制造⼀个 B 象,然后像打针⼀样,注射到 A 当中,这样就完成了对各个对象之间关系的控制。A 需要依赖 B 才能正常运⾏,⽽这个 B 是由 spring 注⼊到 A 中的,依赖注⼊的名字就这么来的。
DI 原理:Java 1.3之后⼀个重要特征是反射(reflection),它允许程序在运⾏的时候动态的⽣成对象、执⾏对象的⽅法、改变对象的属
性,spring 就是通过反射来实现注⼊的。
没有 spring 时:在⼀个对象中,如果要使⽤另外的对象,就必须得到它(⾃⼰ new ⼀个,或者从 JNDI 中查询⼀个),使⽤完之后还要将对象销毁(⽐如Connection等),对象始终会和其他的接⼝或类藕合起来。
有 spring 时:所有的类都会在 spring 容器中登记,告诉 spring 你是个什么东西,你需要什么东西,然后 spring 会在系统运⾏到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring 来控制,也就是说控制对象⽣存周期的不再是引⽤它的对象,⽽是 spring。对于某个具体的对象⽽⾔,以前是它控制其他对象,现在是所有对象都被 spring 控制,所以这叫控制反转。
aop:⾯向切⾯:
AOP(Aspect-OrientedProgramming,⾯向切⾯编程),可以说是 OOP(Object-Oriented Programing,⾯向对象编程)的补充和完善。AOP 的核⼼思想就是:“将应⽤程序中的商业逻辑同对其提供⽀持的通⽤服务进⾏分离。”
AOP 把软件系统分为两个部分:核⼼关注点和横切关注点。业务处理的主要流程是核⼼关注点,与之关系不⼤的部分是横切关注点。横切关注点的⼀个特点是,他们经常伴随在核⼼关注点前后使⽤,⽽各处都基本相似。⽐如权限认证、⽇志、事务处理。
AOP 技术,利⽤⼀种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共⾏为封装到⼀个可重⽤模块,并将其名为“Aspect”,简单地说,就是将那些与业务⽆关,却为业务模块所共同调⽤的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
举个例⼦,当你的程序写好后,需要在所有的业务操作中添加⼀条⽇志,传统的做法是直接改造每个⽅法,但是这样势必让代码变糟糕,要是以后扩展起来那就更乱了。⽽AOP的思想就让你能从⼀个切⾯的⾓度来看待这些插⼊问题,AOP允许你以⼀种统⼀的⽅式在运⾏时期在想要的地⽅插⼊这些逻辑。
专业⼀点的说法,什么是⾯向切⾯编程?这种在运⾏时,动态地将代码切⼊到类的指定⽅法、指定位置上的编程思想就是⾯向切⾯的编程。
实现 AOP 的技术,主要分为两⼤类:
⼀是采⽤动态代理技术,利⽤截取消息的⽅式,对该消息进⾏装饰,以取代原有对象⾏为的执⾏;
⼆是采⽤静态织⼊的⽅式,引⼊特定的语法创建“⽅⾯”,从⽽使得编译器可以在编译期间织⼊有关“⽅⾯”的代码。
Spring 采⽤动态代理织⼊,⽽ AspectJ 采⽤编译器织⼊和类装载期织⼊。
Spring AOP使⽤了两种动态代理机制:
⼀种是基于 JDK 的动态代理
⼀种是基于 CGLib 的动态代理。
JDK1.3 以后,java 提供了动态代理技术,允许开发者在运⾏期间动态的创建接⼝的代理实例,JDK 的动态代理主要涉及到 flect 包中的两个类:Proxy 和 InvocationHandler。
CGLib 采⽤⾮常底层的字节码技术,可以为⼀个类创建⼦类,并在⼦类中采⽤⽅法拦截的结束拦截所有⽗类⽅法的调⽤,并顺势织⼊横切逻辑。
参考⽂章:
每天学习⼀点点,每天进步⼀点点。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论