Spring框架的两个核心功能:
- Spring容器作为超级大工厂,负责创建,管理所有的Java对象,这些对象被称为Bean。
- Spring容器管理容器中Bean之间的依赖关系,
Spring使用一种被称为“依赖注入”的方式来管理Bean之间的依赖关系。
- Spring容器作为超级大工厂,负责创建,管理所有的Java对象,这些对象被称为Bean。
- Spring容器管理容器中Bean之间的依赖关系,
Spring使用一种被称为“依赖注入”的方式来管理Bean之间的依赖关系。
Spring容器常用接口
ApplicationContext:BeanFactory 的子接口,该接口的实现类:
ClassPathXmlApplicationContext:用于搜索加载类路径下的配置文件
FileSystemXmlApplicationContext:用于搜索加载相对路径或绝对路径下的配置文件
Spring的核心机制:依赖注入
A对象调用B对象被Spring称为依赖,即A对象依赖B对象。假如A组件调用了B组件的方法,即可称A组件依赖B组件。
Ioc控制反转:调用者主动获取被依赖对象变为被动接受Spring容器为调用者的成员变量赋值(依赖注入)。
设值注入:IoC容器使用成员变量的setter方法来注入被依赖对象。
Spring<bean />的子元素<property />
用于执行JavaBean的setter方法
name:用于执行哪一个setter方法
value或ref:用于传入setter方法的参数。value用于传入基本数据类型及其包装类,ref用于传入其他Bean。
构造注入:IoC容器使用构造器来注入被依赖对象。
Spring<bean />的子元素<constructor-arg />
index:用于指定作为第几个构造参数
type:用于指定构造参数的类型
value或ref:用于传入构造器的参数。value用于传入基本数据类型及其包装类,ref用于传入其他Bean。
ApplicationContext的国际化支持
ApplicationContext接口继承了MessageSource接口,因此具有国际化功能。
String getMessage(String code, Object[] args, Locale loc)
String getMessage(String code, Object[] args, String default, Locale loc)
ApplicationContext的事件机制
ApplicationEvent:容器事件,必须由ApplicationContext发布
publishEvent():发布容器事件
ApplicationListener:监听器,可由容器中的任意监听器Bean担任。
Spring 容器中的Bean
Bean的基本定义和Bean别名
id:确定该Bean的唯一标示,如果Bean的标识必须包含一些特殊符号,此时可以采用name属性,用于指定Bean的别名。通过访问Bean别名也可以访问Bean实例。
class:指定该Bean的具体实现类,这里不能是接口 。
<alias name="" alias="" />指定别名
容器中Bean的作用域(scope)
singleton:单例模式。singleton作用域内的Bean将只生成一个实例。
prototype:每次通过getBean()获取prototype作用域内的Bean时,都将生成一个新的Bean实例。
request:对于一次HTTP请求,只生成一个实例。
session:对于一次HTTP回话,只生成一个实例。
application:对于整个Web应用,只生成一个实例。
websocket:在整个WebSocket的通信过程中,只生成一个实例。
使用自动装配注入合作者Bean
<beans .../>元素的default-autowire属性指定,所有的Bean起作用。
<bean .../>元素的autowire属性指定,只对该Bean起作用。
autowire、default-autowire属性可以接收如下值:
no:不使用自动装配。必须通过ref元素定义。
byName:根据setter方法名与Bean的id进行匹配。
byType:根据setter方法的形参类型来自动装配。
Spring提供的Java配置管理(注解)
@Configuration:用于修饰一个Java类
@Bean:用于修饰一个方法,将该方法的返回值定义成一个Bean
@Value:用于修饰一个Field,用于为该Field配置一个值,相当于配置一个变量。
使用AnnotationConfigApplicationContext(AppConfig.class)创建Spring容器。
<bean class="AppConfig" />加载配置类
@ImportResource("classpath:/beans.xml")加载配置文件
创建Bean的3种方式
调用构造器创建Bean
调用静态工厂方法创建Bean
调用实例工厂方法创建Bean
获得Bean本身的id
通过实现BeanNameAware接口的setBeanName()方法
容器中Bean的生命周期
注入依赖关系之后
使用init-method属性
实现InitialzingBean接口
即将销毁Bean之前
使用destory-method属性
实现DisposableBean接口
协调作用域不同步的Bean
<lookup-method name="" bean="" />
高级依赖关系配置
获取其他Bean的属性值
PropertyPathFactoryBean调用其他Bean的getter方法:
调用哪个对象:setTargetObject(Object targetObject)
调用哪个getter方法:setPropertyPath(String propertyPath)
<util:property-path.../>简化配置:
id:指定将getter方法的返回值定义成名为id的Bean实例。
path:指定哪个Bean实例,哪个属性暴漏出来。
FieldRetrievingFactoryBean获取Field值
MethodInvokingFactoryBean获取方法返回值
基于XML Schema的简化配置方式
使用p:命名空间来驱动执行setter方法 (设值注入)
使用c:命名控件来驱动执行构造器方法 (构造注入)
util:命名空间简化constant,property-path、list,set,map,properties
aop:命名空间简化Spring AOP
jee:简化Spring的Java EE配置
jms:简化Spring关于JMS的配置
lang:简化Spring动态语言
tx:简化Spring事务配置
Spring提供的表达式语言(SpEL)
网友评论