Spring In Action
2019-01-26 14:40:44 1 举报
AI智能生成
Spring In Action学习总结
作者其他创作
大纲/内容
2-装配Bean
2.1-装配机制
隐式的Bean发现和自动装配
基于Java的显示配置
基于XML的显示配置
2.2-自动化装配Bean
实现方式
组件扫描
自动装配
4-面向切面
1-Spring基础
两个特性
反向控制【IOC】
使用IOC,对象的依赖都是在创建对象时由负责协调系统中各个对象的外部实体提供的。
面向切面编程【AOP】
用在系统中提升业务的分离
特点
轻量级
反向控制
面向切面
容器
框架
框架模块
核心容器
Bean工厂
提供基础的依赖注入支持
应用上下文
提供系统架构服务
应用上下文模块
常用功能
文本信息解析工具
载入文件资源的通用方法
向注册为监听器的Bean发送事件
常用实现类
ClassPathXmlApplicationContext
FileSystemXmlApplicationContext
XmlWebApplicationContext
AOP模块
JDBC和DAO模块
O/R映射模块
Web模块
MVC框架
知识点总结
1-减少耦合的一个通常做法就是将具体实现隐藏在接口下,
Bean
生命周期
1-容器寻找Bean的定义信息并将其实例化
2-使用依赖注入,配置Bean的所有属性
3-调用BeanNameAware接口的SetBeanName方法传递Bean的ID
4-调用BeanFactoryAware接口的SetBeanFactory方法
5-预初始化postProcessBeforeInitialization
6-初始化init-method
7-初始化完成postProcessAfterInitialization
8-可以使用或者删除
9-DisposableBean删除方法或者定制删除方法
其他说明
原型和单实例
Bean在缺省情况下是单例模式,可通过singleton配置是否为单例
装配的集合类型
List
Set
Map
Props
值只能是String类型
用index属性来解决构造函方法参数的不确定性
3-高级装配
3.1-profile
1.0-三种DataSource配置
1-EmbeddedDatabaseBuilder
2-使用JNDI
3-Command DBCP连接池
2.0-Java配置profile bean
pring中是在运行时才确定使用和创建profile bean,而不是在编译构建时确认
在java配置中使用@Profile注解来制定某个bean属于哪个profile
Spring3.1中只能在类中使用@Profile注解,而在Spring3.2中可以在方法级别中使用@Profile注解
3.0-XML配置profile
可以在根<beans>元素中嵌套定义<beans>元素,而不是为每个环境都创建一个profile XML文件。
4.0-激活profile
依赖的属性
spring.profiles.active
用来确定哪个profile是激活的。
spring.profiles.default
如果没有设置active,则按spring.profiles.default设置的profile来激活
属性设置方式
作为DispatcherServlet的初始化参数
作为Web应用的上下文参数
作为JNDI条目
作为环境变量
作为JVM的系统属性
在集成测试类上,使用@ActiveProfiles注解设置
3.2-条件化的bean
引入@Conditional注解来实现满足某个条件时,才去创建Bean
使用方法
创建一个类MagicExistsCondition来实现Conditional接口的matches方法
在Bean中加上注解@Conditional{MagicExistsCondition.class}
matches接口参数
ConditionContext
借助它的getRegistry()返回的BeanDefinitionRegistry检查Bean的定义
借助getBeanFactory()返回的ConfigurableListableBeanFactory检查Bean是否存在
借助getEnvironment()返回的Environment对象来检查环境变量是否存在以及获取它的值是什么
读取并查找getResourceLoader()返回的ResourceLoader所加载的资源
借助getClassLoader()返回的ClassLoader加载并检查类是否存在
AnnotatedTypeMetadata
借助IsAnnotated方法,可以判断带有@bean注解的方法是否还有其他特定的注解
3.3-处理自动装配的歧义性
问题
Spring在组件扫描时,仅发现只有一个bean匹配所需要的结果时,@Autowired自动装配才有效。
解决方法
1.0-标示首选的bean
Java显示配置【@primary】
XML配置【primary="true"】
2.0-限定自动装配的bean
@Qualifier注解(@Qualifier("iceCream"))
限定符要与注入的Bean名称是紧耦合的
还可以创建自定义的限定符注解
3.4-bean的作用域
种类
单例(Singleton)
在整个应用中,只创建bean的一个实例
原型(Prototype)
每次注入或者通过Spring应用上下文获取的时候,都创建一个新的bean实例
会话(Session)
在web应用中,为每个会话创建一个bean实例
请求(Request)
在web应用中,为每个请求创建一个bean实例
方法
@Scope注解【@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)】
XML配置【scope="prototype"】
3.5-运行时值注入
两种方式
1.0-属性占位符(Property placeholder)
2.0-Spring表达式语言【SpEL】
注入外部的值
声明属性源并通过Spring的Environment来检索属性【@PropertySource注解】
Environment
使用getProperty()方法获取属性值
使用containsProperty()方法检查某个属性是否存在
使用getPropertyAsClass()方法将属性解析为类
使用getActiveProfiles()方法获取激活Profile名称的数组
使用getDefaultProfiles()返回默认profile名称的数组
使用acceptsProfiles(String profiles)方法检查Environment是否支持给定的profile
属性占位符
形式【${.......}】
需使用PropertySourcesPlaceHolderConfigurer来解析占位符
SpEL【SpringExpression Language】
特性
使用bean的ID来引用bean
调用方法和访问对象的属性
对值进行算术、关系和逻辑运算
正则表达式匹配
集合操作
形式【#{...........}】
0 条评论
下一页