Spring笔记



什么是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表达式语言:SpEL
Spring表达式语言是一个支持运行时查询和操作对象的强大的表达式语言。
语法类似于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元素为工厂方法传递方法参数



















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一课:面向抽象编程 4 第二课:Jdom的基本使用 4 第三课:模拟Spring功能 5 第四课:搭建sping的运行环境 8 一、 建立一个新的项目 8 二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting dependencies) 9 (一) setter注入类型Setter Injection 9 (二) 构造方法Constructor Injection 10 四、 id、name 11 五、 简单属性的注入 11 六、 Bean的作用范围scope 12 七、 集合注入 12 八、 自动装配autowire 13 (一) byName 13 (二) byType 14 (三) 注意 14 九、 生命周期 15 (一) lazy-init/default-lazy-init 15 (二) init-method destroy-method 不要和prototype一起用(了解) 15 第六课:annotation方式Spring 16 一、 开始使用annotation配置Spring 16 二、 @Autowired、@Qualifier 16 (一) @Autowired 16 (二) @Qualifier 17 三、 @Resource(重要、推荐) 17 (一) JSR-250 17 (二) @Resource 17 四、 @Componet 18 五、 @Scope、@PostConstruct、@PreDestroy 19 六、 注解对应的jar包 19 第七课:AOP(面向切面编程) 19 一、 AOP概念 19 二、 利用动态代理实现面向切面编程 20 第八课:Spring AOP配置选项 21 一、 AOP配置annotation方式 21 (一) 搭建annotation开发环境 21 (二) aspectJ类库 22 (三) AOP的annotation实例 22 (四) AspectJ的专业术语 23 (五) 织入点语法 23 (六) Advice 24 (七) Pointcut 26 (八) annotatin方式的AOP实例 26 二、 AOP配置xml方式 27 三、 AOP实现动态代理注意 28 第九课:DataSource 28 一、 Sping配置数据源: 28 二、 注入使用 29 三、 dbcp.BasicDataSource 29 第十课 Spring整合Hiberante3 30 一、 Spring配置hibernate3的SessionFactory 30 (一) xml形式的SessionFactory 30 (二) annotation注解方式的SessionFactory 30 二、 引入hibernate所需要使用的jar 31 (一) 基本jar 31 (二) 加入annotation功能的jar包 31 (三) 搭建日志环境并配置显示DDL语句jar包 31 三、 Spring整合hibernate3事务 31 (一) Annotation注解方式配置事务管理 31 (二) Spring事务选项 35 (三) XML文件形式配置Spring事务管理 37 四、 HibernateTemplate 38 (一) HibernateTemplate 38 (二) HibernateDaoSupport 39 第十一课:Spring整合-SSH 40 一、 第一步:加入jar包(需要的jar包列表) 40 二、 第二步: 首先整合Spring + Hibernate 41 三、 第三步:再来整合Struts2 41 四、 struts的读常量: 43 第十二课:DTO、VO 43 一、 DTO 43 二、 VO 43 第十二课:SSH整合存在的问题 43 一、 Jsp中访问Session时,Session已经关闭 43 二、 如果不配置事务,openSessionView出现异常 44 三、 中文乱码问题: 44 第十三课:SSH整合的jar包 45 一、 Struts2 45 二、 Hibernate3.3.2 45 三、 Spring 46

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值