applicationContext.xml 解析详细-Spring源码学习之XML文件的初解析

首先,在我的这篇博客中已经说到容器是怎么初步实现的,并且要使用XmlBeanDefinitionReader对象对Xml文件进行解析,那么Xml文件是如何进行解析的,将在这片博客中进行一些陈述.


数据准备阶段

准备的目的是封装resource参数,目的是为了考虑到Resource可能存在编码要求的情况,其次,通过SAX读取XML文件的方式来准备InputSource对象,最后将参数传递到最核心的实现部分doLoadBeanDefinitions(inputSource,encodedResource.getResource())

封装Resource

调用XmlBeanDefinitionReaderloadBeanDefinitions(Resource resource)方法时,首先将resource对象进行再次封装成EncodedResource,查看源码可以发现里面增加了字符集和编码的封装,从命名上来看也可以体现出来,将资源封装完成后,就调用重载的同名函数loadBeanDefinitions(EncodedResource resource)进行正式的解析.

数据准备操作

在重载方法里面首先通过Set<!-- <EncodedResource> --> currentResources属性来记录已经加载的资源,其次,从EncodedResource对象中获取封装好的Resource对象,并获取其inputStream,将获取到的输入流与SAX解析的InputSource绑定,接下来就进入到了核心的实现部分:doLoadBeanDefinitions(inputSource,encodedResource.getResource())

BeanFactory与ApplicationContext的区别-Spring源码学习之容器的基本实现

可以加载XML两种方法

使用 BeanFactory 加载 XML

1
BeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicaitonContext.xml"));

Ps:因为我是跟着《Spring源码深度解析》学习的,而这本书出版在13年9月,这一种方法在新的Spring版本中已经废弃掉了,取而代之的是下面的方法;但既然学了,那就还是记录一下,学习一下开发者的思想也是不错的.

使用 ApplicationContext 加载 XML

1
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

《Spring 实战》-- Spring Web Flow 学习笔记

Spring Web FlowSpring MVC的扩展,它支持开发基于流程的应用程序.它将流程的定义与实现流程行为的类和视图分离开来.

Spring中配置Web Flow

Spring Web Flow是构建于Spring MVC的基础上的,这意味着所有的流程请求都需要首先经过DispatcherServlet.我们需要在Spring应用上下文中配置一些Bean来处理流程并执行请求.

首先,我们在Spring的基础上会多使用到4个jar包,并且会使用到flow命名空间

jar包

Spring MVC 搭建 - Hello world

现在的Web框架基本都采用了MVC(model-view-Controller)设计模式,其中,ServletFilter都可以充当控制器.Spring MVC采用一个Servlet作为控制器,而Struts2则采用的Filter作为控制器.

对于他们的区别我在这里不多赘述,可以参见这篇文章SpringMVC与Struts2区别与比较总结

Spring MVC的搭建可以通过Java代码的方式(在《Spring 实战》一书中有详细讲解),也可以通过配置文件的方式,这里讲到的是运用配置文件的方式进行搭建.

高性能Mysql学习笔记之事务

什么是事务?

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就会执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。简单的说,一个事务内的语句,要么全部执行成功,要么全部执行失败

Spring的声明式事务-Transactional

Spring的声明式事务

配置

需要在xml文件中配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!--配置事务管理器类-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--这里的dataSource引用前边配置好的dataSource-->
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
<!--事务的建议-->
<tx:advice id="interceptor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!--配置事务切面-->
<aop:config proxy-target-class="true" expose-proxy="true">
<!--切点为该包下的所有类的所有方法,任意返回值,任意参数-->
<aop:pointcut id="txPointCut" expression="execution(* geek.service.*.* (..))"/>
<!--在切点处加入事务-->
<aop:advisor advice-ref="interceptor" pointcut-ref="txPointCut"></aop:advisor>
</aop:config>

Idea 使用 Maven 搭建 Web 项目

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。

使用它来搭建项目可以省去很多操作,它不仅有依赖管理、自动生成项目站点等超酷的特性,还可以让你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。(可以通过《Maven 实战》一书进行详细学习)

|