您的位置:首页 > 编程语言 > Java开发

Spring杂记

2016-07-14 22:20 609 查看
首先介绍下spring的核心模块:

如图:



Spring IOC

IOC (Inversion of Control,控制反转) 是spring的核心,所谓IOC,就是spring来负责控制对象的生命周期和对象间的关系。

传统开发模式:对象之间相互依赖

IOC开发模式: IOC容器安排对象之间的依赖

IOC理论背景:



对于这种耦合关系,如果其中一个齿轮出类问题,机器就不能正常运转。因此,需要降低对象之间的耦合度。



IOC的处理模式简单来说就是把复杂的系统分解成相互独立的对象。借助第三方实现对象的解耦。

把中间的部分拿掉,就是最理想的系统:



这样,在实现A的时候,就无须再考虑BCD了

IOC的另外的名字是依赖注入(DI, Dependency Injection):就是由IOC容器运行期间,动态的将某种依赖关系注入到对象之中,所以,依赖注入和控制反转时从不同角度的描述同一件事情,就是指引入IOC容器,利用依赖关系注入方式,实现对象之间的解耦。

IOC通俗理解:

IOC : 创建对象实例的控制权从代码控制剥离到IOC容器控制,就是在xml文件中控制,侧重于原理。

DI:创建对象实例时,为这个对象注入属性值或其他对象实例,侧重于实现。

Spring AOP

AOP专门用于处理系统中分布于各个模块中的交叉关注点的问题,在JavaEE应用中,通常通过AOP来处理一些具有横切性质的系统级服务,如:事务管理,安全检查,缓存,对象池管理等。

如图:



如果需要修改深色部分的代码,需要修改三个地方。



这里,只需要修改深色部分就可以了

AOP代理其实是由AOP框架动态生辰的一个对象,该对象可以作为目标对象使用,AOP代理包含的方法与目标对象的方法如图:



在AOP中,需要程序员参与的主要有三个部分:

定义普通业务组件,

定义切入点,一个切入点可能横切多个业务组件

定义增强处理

代理对象的方法=增强处理+被代理对象的方法;

AOP的通俗理解:

一个组件A,不关心其他常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身区调用,而是通过配置等其他方式,比如Spring中可以通过xml配置文件,这样就使得A压根不需要知道B组建是怎么样的,是否存在,A只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关。

2 .spring 的框架开发包:(需要引入到jar文件中的包)

2.1 核心开发包

spring Core: 包含spring框架的核心工具类,spring的其他组件都需要使用这个包。

spring Beans: 所有应用都要用到,包含访问配置文件, 创建和管理bean,进行控制反转和依赖注入相关的操作。

spring AOP: 使用spring 的AOP需要的文件,申明性的事务管理,日志系统的引入等

spring Context:为spring核心提供大量扩展,它是访问定义和配置的任何对象的媒介。ApplicationContext 接口是上下文模块的重点。

2.2 业务组件包, 提供各种企业级的服务:

spring Aspects: 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。

spring Context Support : 这个开发包包含了支持缓存catch、JCA、JMX、邮件服务、任务计划等方面的这些所有类。

spring Expression :是Spring表达式语言。spring3.0创建了一种新的方式用于配置对象的注入,他便是SPEL即Spring Expression
Language。有别于传统的Spring静态配置,他支持在运行时操作和查询对象,其语法类似统一的EL语言。

spring Framework Bom: 在使用Maven时 确保所有的Spring模块都使用统一的版本。

spring Instrument: 提供spring3.0对服务器的代理接口

spring Instrument Tomcat: 提供spring 3.0对Tomcat连接池的集成。

spring JDBC: 包含了Spring对JDBC数据访问时进行封装的所有类。Spring提供了两种使用Spring JDBC API的最佳实践:1.以JDBC Template为核心的基于Template JDBC的使用方式。2.是在JDBC Template的基础之上构建的基于操作对象的JDBC 的使用方式。

spring JMS: 提供了对Spring JMS1.0和JMS1.1的支持类。Spring 的JMS抽象框架简化了JMS API的使用并与JMS的提供者平滑的继承。org.springframework.jms.core包提供了在Spring当中使用JMS的核心功能,他的模版类处理资源的创建和释放,简化了JMS的使用。

spring orm : Spring对DAO特性进行了扩展,使其支持iBATIS 、JDO、OJB、TopLink,因为Hibernate已经独立成包了,所以不包含在这个包中了。 在使用这个包时必须同时包含sprin-dao.jar

spring oxm: Spring对Object XML的映射支持,可以让JAVA与XML之间来回切换。这是Spring3.0的一个新特性。OXM既是OXMapper,OX映射器这个概念并不新鲜,O代表Object ,X代表XML。他的目的是在JAVA和XML文档之间来回转换。

spring struts: 提供了对struts框架的支持。

spring test: 提供对junit等的检测封装。

spring tx :Spring transection,他为JDBC、Hibernate、JDO、JPA等提供了一致的声明式的编程式事物管理。

spring web: 包含web应用研发时用到Spring框架时所需要的的核心类。

spring webmvc: 包含了spring mvc框架相关的所有类,如果应用使用了独立的spring mvc框架,则无需使用这个jar包

spring webmvc portlet: 提供了对Spring MVC的增强,支持了portlet标准。Spring不仅支持传统的web开发,也支持JSR-168 portlet的开发。PortletMVC框架尽可能多的采用WEB MVC的框架,使相同的底层表现层抽象和整合技术。

如何选择使用这些包呢:

如果构建web应用并将全程使用spring,就使用全部的开发包文件,如果仅用到简单的ioc容器,只要spring-core和spring-beans两个jar包。

3 Spring IOC 的理解

3.1 IOC概述:

IOC是spring容器的内核,AOP,声明事务等功能都依赖于此功能,它涉及代码解耦,设计模式,代码优化等问题的考量:

DI概念的引入: 让调用类对某一接口实现类的依赖关系由第三方引入, 以移除调用类对某一接口实现类的依赖。

3.2.IOC 的注入类型 :

构造函数注入:通过调用类的构造函数,将接口实现类通过构造函数变量转入。
属性注入:通过setter方法完成调用类所需依赖的注入,更加灵活方便
接口注入:将调用类所有依赖注入的方法抽象到一个接口中,调用类通过实现该接口提供相应的注入方法。

3.3 Ioc的注入方式:
Spring作为一个容器,通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入的工作。
在理解spring ioc之前,关注下java的反射机制

4. Java反射机制

Java语言允许通过程序化的方式间接对Class的对象实力操作,Class文件由类转载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息,如构造函数,属性和方法。

ClassLoader : 类装载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件,主要工作由ClassLoader及其子类负责,ClassLoader是一个重要的java运行时系统组件,他负责在运行时查找和装入Class字节码文件。

工作机制:

装载: 查找和导入Class类文件
链接:执行校验,准备和解析步骤
初始化:对类的静态变量,静态代码块执行初始化工作

类装载器的重要方法:java.lang

Class loadClass(String name) ; //name全限定类名
Class defineClass(String name, byte[]b, int off, int len); // 将类文件的字节数组转换为java.lang.class对象;
Class findSystemClass(String name); //从本地文件系统载入class文件
Class findLoadedClass(String name); //查看classLoader是否装载到某个类中
ClassLoader getParent();//获得类装载器的父装载器

Class反射对象描述类语义结构,可以从Class对象中获取构造函数,成员变量,方法等类元素反射对象,并以编程的方式通过这些反射对象对目变革对象进行操作。这些反射对象类在java.reflect包中定义,主要的三个反射类有:

Constructor. 类的构造函数反射类

Method :获取类方法
Field :类的成员变量反射类

Java反射机制与ioc的关系:

在spring中,通过IOC可以将实现类,参数信息等配置在其对应的配置文件中,当需要更改实现类或参数信息时,只需要需改配置文件即可,还可以对某对象所需要的其他对象进行注入,这种注入都是在配置文件中做的。

spring的ioc的实现原理就是利用java的反射机制,spring的工厂类完成配置文件的读取,利用反射机制注入对象等工作,可以通过bean的名称获取对应的对象。

5 Spring资源访问工具类

JDK提供的访问资源的类不能很好的满足各种底层资源的访问需求,因此,Spring提供了一个Resource接口:

如要方法:

boolean exists(); //判断资源是否存在
boolean isOpen(); //资源是否打开;
URL getURL(); //如果底层资源对应一个URL,返回对应的URL对象
File getFile(); //如果底层资源对应一个文件,返回对应file文件
InputStream getInputStream(); //返回对应输入流

具体实现类:

ByteArrayResource: 二进制数组表示的资源
ClassPathResource; 类路径下的资源
FileSystemResource; 文件系统资源
InputStreamResource:
ServletContextResource: 为访问web容器中上下文的资源设计,支持流,URL方式的访问
UrlResource: 可以访问任何通过URL表示的资源

Spring提供类加载资源的机制,自动识别不同资源类型

资源类型地址前缀:

classpath classpath:com/xx/bian.xml 从类路径加载
File file:/com/xx/bean.xml 主要使用url,从文件系统路径中装载资源
http:

ftp
无前缀

Spring定义了一套资源加载的接口,并提供类实现类:

ResourceLoader: : getResource(String location):Resource:

Resource :getFile() File .........

6. BeanFactory和ApplicationContext

BeanFactory是Spring框架最核心的接口,它提供类高级IOC配置机制 ==IOC容器

ApplicationContext建立在BeanFactory基础之上,提供类更多面向应用的功能。== 应用上下文

BeanFactory是一个类工厂,可以创建和管理各种类对象,Spring称这些创建和管理的java对象为bean。

类体系结构:

XmlBeanFactory:
ListableBeanFactory:
HierarhicalBeanFactory : 父子级联IOC容器的接口
ConfigurableBeanFactory
...........

初始化顺序:

创建配置文件
装载配置文件
启动Ioc容器
获取Bean实例

ApplicationContext由BeanFactory派生而来。提供了更多面向实际应用的功能。在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中通过配置的方式实现

ApplicationContext的实现类:

ClassPathApplicationContext :类路径加载配置文件

FileSystemApplicationContext
ConfigureableApplicationContext:

扩展接口:

ApplicationEventPublisher:
MessageSource
........

学习spring随手记录的一些东西,具体参考:www.jikexueyuan.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: