Atitit.spring体系结构大总结
Atitit.spring体系结构大总结
3. ApplicationContext在BeanFactory的基础上构建,区别 4
5. 3.2.4.1. @AspectJ形式的SpringAOP 5
10. spring的持久层封装 使用jdbctemptate访问数据
6
11. 2.3.1.3.7. 方法注入(Method Injection) 偷梁换柱之术 6
12. 国际化信息支持(I18N MessageSource) 6
13. Spring框架对JMS的集成(JMS Made Easy With Spring)
7
15. 7.4.2. Spring对JDK Timer的集成 7
16. Spring远程方案(Spring Remoting) 7
1. Srping mvc
4.2.1 直接编码方式
其实,把编码方式单独提出来称作一种方式并不十分恰当。因为不管什么方式,最终都需要编码才能"落实"所有信息并付诸使用。不过,通过这些代码,起码可以让我们更加清楚BeanFactory在底层是如何运作的。
下面来看一下我们的FX新闻系统相关类是如何注册并绑定的(见代码清单4-4)。
代码清单4-4 通过编码方式使用BeanFactory实现FX新闻相关类的注册及绑定
作者::老哇的爪子Attilax艾龙,EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
BeanFactory 只是一个接口,我们最终需要一个该接口的实现来进行实际的Bean的管理,Default- ListableBeanFactory就是这么一个比较通用的BeanFactory实现类。DefaultListableBean- Factory除了间接地实现了BeanFactory接口,还实现了BeanDefinitionRegistry接口,该接口才是在 BeanFactory的实现中担当Bean注册管理的角色。基本上,BeanFactory接口只定义如何访问容器内管理的Bean的方法,各个 BeanFactory的具体实现类负责具体Bean的注册以及管理工作。BeanDefinitionRegistry接口定义抽象了Bean的注册逻 辑。通常情况下,具体的BeanFactory实现类会实现这个接口来管理Bean的注册。它们之间的关系如图4-3所示。
在bindViaCode方法中,首先针对相应的业务对象构造与其相对应的BeanDefinition,使用了RootBeanDefinition作 为BeanDefinition的实现类。构造完成后,将这些BeanDefinition注册到通过方法参数传进来的 BeanDefinitionRegistry中。之后,因为我们的FXNewsProvider是采用的构造方法注入,所以,需要通过 ConstructorArgument- Values为其注入相关依赖。在这里为了同时说明setter方法注入,也同时展示了在Spring中如何使用代码实现setter方法注入。如果要运 行这段代码,需要把setter方法注入部分的4行代码注释掉。最后,以BeanFactory的形式返回已经注册并绑定了所有相关业务对象的 BeanDefini- tionRegistry实例。
public static void main(String[] args) {
DefaultListableBeanFactory beanRegistry = new DefaultListableBeanFactory(); BeanFactory container = (BeanFactory)bindViaCode(beanRegistry); FXNewsProvider newsProvider = ?
(FXNewsProvider)container.getBean("djNewsProvider"); newsProvider.getAndPersistNews(); }
public static BeanFactory bindViaCode(BeanDefinitionRegistry registry) {
AbstractBeanDefinition newsProvider = ?
new RootBeanDefinition(FXNewsProvider.class,true); AbstractBeanDefinition newsListener = ?
new RootBeanDefinition(DowJonesNewsListener.class,true); AbstractBeanDefinition newsPersister = ?
new RootBeanDefinition(DowJonesNewsPersister.class,true); // 将bean定义注册到容器中
registry.registerBeanDefinition("djNewsProvider", newsProvider); registry.registerBeanDefinition("djListener", newsListener); registry.registerBeanDefinition("djPersister", newsPersister);
BeanFactory需要使用的对象注册和依赖绑定信息称为Configuration Metadata。我们这里所展示的,实际上就是组织这些Configuration Metadata的各种方式。因此这个标题才这么长。
4.2 BeanFactory的对象注册与依赖绑定方式 27
// 1. 可以通过构造方法注入方式
ConstructorArgumentValues argValues = new ConstructorArgumentValues(); argValues.addIndexedArgumentValue(0, newsListener); argValues.addIndexedArgumentValue(1, newsPersister); newsProvider.setConstructorArgumentValues(argValues); // 2. 或者通过setter方法注入方式
MutablePropertyValues propertyValues = new MutablePropertyValues();
propertyValues.addPropertyValue(new ropertyValue("newsListener",newsListener));
propertyValues.addPropertyValue(new PropertyValue("newPersistener",newsPersister)); newsProvider.setPropertyValues(propertyValues); // 绑定完成
return (BeanFactory)registry;
}
BeanFactory 只是一个接口,我们最终需要一个该接口的实现来进行实际的Bean的管理,Default- ListableBeanFactory就是这么一个比较通用的BeanFactory实现类。DefaultListableBean- Factory除了间接地实现了BeanFactory接口,还实现了BeanDefinitionRegistry接口,该接口才
是在 BeanFactory的实现中担当Bean注册管理的角色。基本上,BeanFactory接口只定义如何访问容器内管理的Bean的方法,各个 BeanFactory的具体实现类负责具体Bean的注册以及管理工作。BeanDefinitionRegistry接口定义抽象了Bean的注册逻 辑。通常情况下,具体的BeanFactory实现类会实现这个接口来管理Bean的注册。它们之间的关系如图4-3所示。
2. Ioc
2.2.1. IoC Service Provider的职责
2.2.2. 运筹帷幄的秘密-IoC Service Provider如何管理对象间的依赖关系
2.2.2.1. 直接编码方式(register via programming)
3. ApplicationContext在BeanFactory的基础上构建,区别
IoC容器选择。
? ApplicationContext。ApplicationContext在BeanFactory的基础上构建,是相对比较高级的容器实现,除了拥 有BeanFactory的所有支持,ApplicationContext还提供了其他高级特性,比如事件发布、国际化信息支持等,这些会在后面详述。 ApplicationContext所管理的对象,在该类型容器启动之后,默认全部初始化并绑定完成。所以,相对于BeanFactory来 说,ApplicationContext要求更多的系统资源,同时,因为在启动时就完成所有初始化,容器启动时间较之BeanFactory也会长一 些。在那些系统资源充足,并且要求更多功能的场景中,ApplicationContext类型的容器是比较合适的选择。
通过图4-2,我们可以对BeanFactory和ApplicationContext之间的关系有一个更清晰的认识。
图4-2 BeanFactory和ApplicationContext继承关系
注意 ApplicationContext间接继承自BeanFactory,所以说它是构建于BeanFactory之上的IoC容器。此外,你应该注意到了,ApplicationContext还继承了其他三个接口,它们之间的关系,我们将在第5章中详细说明。
另外,在没有特殊指明的情况下,以BeanFactory为中心所讲述的内容同样适用于Applica- tionContext,这一点需要明确一下,二者有差别的地方会在合适的位臵给出解释。
4. Aop
5. 3.2.4.1. @AspectJ形式的SpringAOP
3.2.4.1.1. @AspectJ形式AOP使用之先睹为快
3.2.4. SpringAOP二世
3.2.4.1. @AspectJ形式的SpringAOP
3.2.4.1.1. @AspectJ形式AOP使用之先睹为快
3.2.4.1.1.1. 编程方式织入
3.2.4.1.1.2. 通过autoproxy织入
3.2.4.1.2. @AspectJ形式的Pointcut
3.2.4.1.2.1. @AspectJ形式Pointcut的声明方式
3.2.4.1.2.2. @AspectJ形式Pointcut表达式的标志符
3.2.4.1.2.3. @AspectJ形式的Pointcut在Spring aop中的真实面目
3.2.4.1.3. @AspectJ形式的Advice
6. spring的定时器
7. spring的事务处理
8. spring与struts的整合
9. spring与hibernate的整合
10. spring的持久层封装 使用jdbctemptate访问数据
11. 2.3.1.3.7. 方法注入(Method Injection) 偷梁换柱之术
2.3.1.3.7.1. 方法注入(Method Injection)
2.3.1.3.7.2. 殊途同归
2.3.1.3.7.3. 方法替换(Method Replacement)
12. 国际化信息支持(I18N MessageSource)
2.3.2.2.1. JavaSE提供的国际化支持
2.3.2.2.2. MessageSource与ApplicationContext
2.3.2.2.2.1. 可用的MessageSource实现(Available MessageSources)
2.3.2.2.2.2. MessageSourceAware和MessageSource的注入
13. Spring框架对JMS的集成(JMS Made Easy With Spring)
7.2.1. 说说JMS的身世
7.2.2. 使用JMS API进行应用开发的传统套路
7.2.3. Spring改进后的JMS实战格斗术
7.2.3.1. 消息发送和同步接收(Synchronous Message Sending and Receiving)
14. 7.4.1. Spring与Quartz
7.4.1.1. 初识Quartz
7.4.1.2. 融入Spring大家庭的Quartz
7.4.1.2.1. Job的实现策略
7.4.1.2.2. JobDetail的更多选择
7.4.1.2.3. Trigger的可配置化
7.4.1.2.4. Scheduler的新家
15. 7.4.2. Spring对JDK Timer的集成
7.4.2.1. JDK Timer小记
7.4.2.2. Spring集成后的JDK Timer
7.4.2.2.1. 逃离TimerTask的魔咒
7.4.2.2.2. TimerTask的模块化封装 - ScheduledTimerTask
7.4.2.2.3. Timer的新家 - TimerFactoryBean
7.4.3. Executor的孪生兄弟TaskExecutor
7.4.3.1. 可用的TaskExecutor
7.4.3.2. TaskExecutor使用实例
16. Spring远程方案(Spring Remoting)
8.1. 从“对面交谈 ”到“千里传声 ”
8.2. Spring Remoting架构分析
8.2.1. Spring Remoting之远程访问异常体系
17. 参考
发布《Spring揭秘》整书目录 - 以简始,以简终 Always Keep Child-Like Wonder - ITeye技术网站.htm
4.2.1 直接编码方式 - 51CTO.COM.htm
Spring的IoC容器之BeanFactory-博泰典藏网.htm
基于Schema的AOP 基于Schema的AOP - Java - ITeye论坛.htm
(impt,detail) 发布《Spring揭秘》整书目录 - 以简始,以简终 Always Keep Child-Like Wonder - ITeye技术网站.htm
Atitit.spring体系结构大总结的更多相关文章
- Atitit.hibernate体系结构大总结
Atitit.hibernate体系结构大总结 1. 4.1 hibernate基础语义 80 4.1.1 configuration 80 4.1.2 sessionfactory 81 4. ...
- Atitit.struts2体系结构大总结
Atitit.struts2体系结构大总结 1. 国际化与异常处理 2 2. 第5章 拦截器 2 3. 第7章 输入校验 2 4. 避免表单重复提交与等待页面 2 5. Struts 2对Ajax的支 ...
- Atitit spring 3.0 3.1 3.2 4.0 4.3 5.0 新特性
Atitit spring 3.0 3.1 3.2 4.0 4.3 5.0 新特性 Spring3.0的新特性及其分析 - 我的人生不甘于平庸! - ITeye技术网站.html Spring3.0带 ...
- Atitit 图像处理类库大总结attilax qc20
Atitit 图像处理类库大总结attilax qc20 1.1. 选择与组合不同的图像处理类库1 1.2. Halcon 貌似商业工具,功能强大.1 1.3. Openvc Openvc功能也是比 ...
- Atitit 图像处理30大经典算法attilax总结
Atitit 图像处理30大经典算法attilax总结 1. 识别模糊图片算法2 2. 相似度识别算法(ahash,phash,dhash)2 3. 分辨率太小图片2 4. 横条薯条广告2 5. 图像 ...
- atitit.spring hibernate的事务机制 spring不能保存对象的解决
atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能..log黑头马sql语言.. sessionF ...
- atitit. 管理哲学 大毁灭--- 如何防止企业的自我毁灭
atitit. 管理哲学 大毁灭--- 如何防止企业的自我毁灭 1. 为什么企业组织的生命力 普遍不如国家组织的长久 2 2. 企业的不稳定因子如下:: 2 3. 决策制度 2 3.1. 我们老大说 ...
- atitit.软件设计模式大的总结attialx总结
atitit.软件设计模式大的总结attialx总结 1. 设计模式的历史3 2. 设计模式的数量(253个)3 3. 设计模式的结构4 3.1. 应用场景and条件Context4 3.2. Pro ...
- Spring 7大功能模块的作用
1. Spring 7大功能模块的作用 1) 核心容器(Spring core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系 ...
随机推荐
- Redis 起步(linux)
Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章: 1.Redis简介 Redis是 一个key-value存储系统.和Memcached类似,但是解决 ...
- react组件引用时的default常见错误
1.下面使用方法是正确的: export class StepLoad extends React.Component {} 引用上面插件的方法,重命名 import {StepLoad as Ste ...
- linux清空文件方法
1.以下方法,清除后,文件大小为0 2.以下方法,清除后,文件大小为1 多了一个结束字符
- 如何在SharePoint的列表中使用通配符来filter出ListItem?
一个朋友问我这样一个问题, 他想要快速从SharePoint的文档库中filter出来名字中先带有一个Q, 接着一些其他的字符, 后面再跟着有一个数字20这样的文件. 第一个想法就是修改Share ...
- JavaWeb学习笔记:ServletConfig()和ServletContext()
ServletConfig()和ServletContext() 1.ServletConfig() ServletConfig是一个接口,它由server提供商来实现. ServletConfig封 ...
- .NET-DataTable或DataSet转JSON
通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据:然后利用jQuery内置的AJAX功能直接获得JSON格式的数据:在客户端直接绑定到数据控件里面,从而达到最优. #regio ...
- 【Python】理想论坛每小时发帖量统计图表
写以下代码的目的是分析一天中各时段理想论坛中用户发帖回帖的活跃程度,获得结尾那张图表是核心. 以下代码两种爬虫协助,论坛爬虫先爬主贴,爬到主贴后启动帖子爬虫爬子贴,然后把每个子贴的发表时间等存入数据库 ...
- C++基础学习教程(五)
这一讲我们集中解说类和他的一些特性.首先我们从自己定义一个有理数类来開始. 在C语言中有一个keyword: struct ,用来创建一个结构体类型.可是在C++中这个关键的含义就不只如此了,以下我们 ...
- IOS一句话总结基础知识
1.OC语言中除基本数据类型外的类型都是指针类型:OC中的对象是通过指针对其操作的. 2.宏定义不是语句,所以不能要分好,如#define kCities @"cities" 3. ...
- vbox下安装centos (全部都是基于64位)
1.首先提示说CPU内核不匹配,如下图: 于是查阅资料得知:64位CPU支持32位和64位,而要用64位内核,就需要主板支持,于是修改BIOS,在ADVANCE(高级)里,找到VT(也就是virtua ...