首页 > 学院 > 开发设计 > 正文

Spring笔记

2019-11-06 06:22:01
字体:
来源:转载
供稿:网友
什么是SPRing?Spring是一个开源框架Spring为简化企业级应用开发而生,使用Spring可以使简单的javabean实现以前只有EJB才能实现的功能Spring是一个IOC(DI)和AOP容器框架具体描述Spring:--轻量级 :Spring是非侵入式的,基于Spring开发的应用中的对象可以不依赖Spring的API--依赖注入(DI、IOC)--面向切面编程(AOP)--容器,Spring是一个容器--框架,Spring实现了简单的组件配置组合成一个复杂的应用,在Spring中可以使用xml和java注解组合这些对象。--一站式,在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库IOC和DI概述:IOC(Inversion of Control),反转资源获取的方向,传统资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时地返回资源;而应用了IOC之后,则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源,这种行为也被称为查找的被动形式。DI(Dependency Injection),IOC的另一种表述方式,即组件以一些预先定义好的方式(例如setter方法)接受来自如容器的资源注入,相对于IOC而言,这种表述更直接。配置bean: class: bean的全类名,通过反射的方式在IOC容器中创建bean,所以要求bean必须有无参数的构造器。id: 标识容器中的bean,id唯一。在Spring IOC容器对去bean配置创建bean实例之前,必须对它进行实例化,只有在容器实例化后,才可以从IOC容器里获取bean实例并使用。Spring提供了两种类型的IOC容器实现:--BeanFactory :IOC容器的基本实现--applicationContext:提供更多的高级属性,是BeanFactory的子接口。--BeanFactory是Spring框架的基础设施,面向Spring本身;ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory.--无论使用何种方式,配置文件时相同的。ApplicationContext的主要实现类:--ClassPathXmlApplicationContext :从类路径下加载配置文件--FileSystemXmlApplicationContext:从文件系统中加载配置文件ConfigurableApplicationContext扩展于ApplicationContext,新增两个主要方法refresh()和close()。ApplicationContext在初始化上下文时就实例化所有单例的bean。WebApplicationContext是专门为web应用而准备的,它允许从相对于web根目录的路径中完成初始化工作。依赖注入的方式:--属性注入即通过setter方法注入bean的属性值或依赖的对象属性注入使用<property>元素,使用name属性指定bean的属性名称,value指定属性值。属性注入是实际应用中最常用的注入方式--构造器注入通过构造方法注入bean的属性值或依赖对象,它保证了bean实例在实例化后就可以使用构造器注入在<constructor-arg>元素里声明属性,它没有name属性。--工厂方法注入(不推荐)注入属性值细节:--自动转配==bean之间的关系:继承,依赖--bean的作用域:singleton,prototype,web环境作用域--使用外部属性文件--spEL--IOC容器中bean的生命周期--Spring 4.x新特性:泛型依赖注入字面值:可用字符串表示的值,可以通过<value>元素标签或value属性进行注入基本数据类型及其封装类、Spring等类型可以采取字面值注入的方式若字面值中包含特殊字符,可以使用<![CDATA[]]]>把字面值包裹起来Bean之间的引用:要使bean之间能够互相访问,就必须在bean配置文件中指定对bean的引用,在bean的配置文件中可以通过<ref>元素或ref属性为bean的属性或构造器参数指定对bean的引用。也可以在属性或构造器里包含bean的声明,这样的bean称为内部bean。注入参数详解;null值和级联属性可以使用专用的<null/>元素标签为bean的字符串或其它对象类型的属性注入null值和Struts、hibernate等框架一样,Spring支持级联属性的配置。集合属性;在Spring中可以通过一组内置的xml标签(如<list>,<set>,<map>)来配置集合属性。配置java.util.List类型的属性,需要制定<list>标签,在标签里包含一些元素,这些标签可以通过<value>制定简单的常量值,通过<ref>指定其他bean的引用,通过<bean>指定内置bean定义,通过<null/>指定空元素,甚至可以内嵌其他集合。数组的定义和List一样,都使用<list>配置java.util.Set需要使用<set>标签,定义元素的方法与List一样。java.utilMap通过<map>标签定义,<map>标签可以使用多个<entry>作为子标签,每个条目包含一个个键和一个值。必须在<key>标签里定义键。因为键和值的类型没有限制,所以可以自由地为他们指定<value>,<ref>,<bean>或<null/>元素。可以将Map的键和值作为<entry>的属性定义:简单常量使用key和value来定义,bean引用通过key-ref和value-ref属性定义。使用<props>定义java.util.properties,该标签使用多个<prop>作为子标签,每个<prop>必须定义key属性。使用utility scheme定义集合:使用基本的集合标签定义集合时,不能将集合作为独立的bean定义,导致其他bean无法引用该集合,所以无法再不同bean之间共享集合。可以使用util schema 里的集合标签定义独立的集合bean,注意必须在<beans>根元素里添加util schema定义。使用p命名空间:为了简化文件的配置,越来越多的XML文件采用属性而非子元素配置信息。Spring 2.5版本开始引入了一个新的p命名空间,可以通过<bean>元素属性的方式配置bean属性。使用p命名空间后,基于mxl的配置方式将进一步简化。XML配置里的bean自动装配:Spring IOC容器可以自动装配bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式。byType(根据类型自动装配):若IOC容器中有多个与目标bean类型一致的bean,Spring将无法判定哪个bean最适合该属性,所以不能执行自动装配。byName(根据名称自动装配):必须将目标bean的名称和属性设置的完全不同。constructor(通过构造器自动装配):当bean中存在多个构造器时,此种自动装配方式将会很复杂,不推荐使用。继承bean配置:Spring 允许继承bean配置,被继承的bean成为父bean,继承这个bean的成为子bean。子bean从父bean中继承配置,包括bean的属性配置。子bean也可以覆盖从父bean继承过来的配置。父bean可以作为配置模板,也可以作为bean的实例,若只想把父bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个bean。并不是<bean> 元素里的所欲属性都会被继承,比如:autowire,abstract等也可以忽略父bean的class属性,让子bean指定自己的类,而共享相同的属性配置,但此时abstract必须设为true。依赖bean配置:Spring允许用户通过depends-on属性设定bean前置依赖的bean,前置依赖的bean会在本bean实例化之前创建好。如果设置依赖多个bean,则可以通过逗号,空格的方式配置bean的名称。使用bean的scope属性来配置bean的作用域:singleton:默认值,容器初始创建bean实例,在整个容器的声明周期内只创建这一个bean,单例的。prototype:原型的,容器初始化时不创建bean的实例,而在每次请求时都创建一个新的bean实例,并返回。使用外部属性文件:在配置文件配置bean时,有时需要在bean的配置文件里混入系统部署的细节信息(如文件路径、数据源配置信息等),而这些部署细节实际上需要和bean配置分离。Spring提供了一个PropertyPlaceholderConfigurer的BeanFactory后置处理器,这个处理器允许用户将bean配置的部分内容移到属性文件中,可以在bean配置文件里使用形式为${var}的变量,ProopertyPlaceholderConfigurer从属性文件里加载属性,并使用这些属性来替换变量。Spring还允许在属性文件中使用${propName},以实现属性之间的相互引用。Spring表达式语言:SpELSpring表达式语言是一个支持运行时查询和操作对象的强大的表达式语言。语法类似于EL,SpEL使用#{...}作为定界符,所有在大括号中的字符都将被认为是SpEL.SpEL为bean的属性进行动态赋值提供便利。通过SpEL可以实现:--通过bean的id对bean进行引用 --调用方法以及引用对象中的属性 --计算表达式的值 --正则表达式的匹配 SpEL字面量:字面量的表示:--整数:<property name="count" value="#{4}"/>--小数:<property name="frequency" value="#{4.44}"/>--科学计数法:<property name="capacity" value="#{1e4}"/>--String可以使用单引号或双引号作为字符串的定界符号:<property name="name" value="#{'Chuck'}"/>或<property name="name" value="#{"Chuck”}"/>--Boolean:  <property name="enabled" value="#{false}"/>SpEL:引用bean、属性和方法:调用静态方法或静态属性:通过T()调用一个类的静态方法,他将返回一个Class Object,然后再调用相应的方法或属性:<property name="initValue" value="#{T(java.lang.Math).PI}"/>IOC容器中bean的生命周期方法:SpringIOC容器可以管理bean的生命周期,Spring允许在bean生命周期的特定点执行定制的任务。SpringIOC容器对bean的生命周期进行管理的过程:--通过构造器或工厂方法创建bean实例--为bean属性设置值和对其他bean的引用--调用bean的初始化方法--bean可以使用了--当容器关闭时,调用bean的销毁方法在bean的声明里设置init-method和destory-method属性,为bean指定初始化和销毁方法。创建bean后置处理器:bean后置处理器允许在调用初始化方法前后对bean进行额外的处理。bean后置处理器对IOC容器里的所有bean实例逐一处理,而非单一实例,其典型应用是:检查bean属性的正确性或根据特定的标准更改bean的属性。对bean的后置处理器而言,需要实现interface BeanPostProcessor接口,在初始化方法被调用前后,Spring将把每个bean实例分别传递给上述接口的两个方法:--public Object postProcessBeforeInitialization(Object bean,String beanName)   --public Object postProcessAfterInitialization(Object bean,String beanName)通过调用静态工厂方法来配置Bean,注意不是配置静态工厂方法实例,而是配置bean实例:--class属性:指向静态工厂方法的全类名--factory-method:指向静态工厂方法的名字--constructor-arg:如果工厂方法需要传入参数,使用从constructor-arg来配置参数通过调用实例工厂方法创建bean:实例工厂方法:将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节。要声明通过实例工厂方法创建的实例bean--在bean的factory-bean属性里指定拥有该工厂方法的bean--在factory-method属性里指定该工厂方法的名称--使用construtor-arg元素为工厂方法传递方法参数
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表