2011-7-31_09-21-13_周日

2011-7-31-9:21:13-周日

 

我的个人电脑工作空间目录:D:\Workspaces\tq365

 

<!-- 登陆主页面直接跳转到open.jsp页面 -->
<jsp:forward page="open.jsp"/>

访问路径:
 web.xml --> spring.xml --> struts.xml

站在Web 应用层开发的角度而言,Spring中最重要的组件,除了MVC,还有另外一个令人欣赏的部分:持久层组件。

这里想要表达的意思就是:Webwork+Spring(Core+Persistence+Transaction Management)也许是目前最好的Web 开发组合。

崇尚简单至上的方案(JSP+JavaBean+JDBC),以及皇家正统的企业级策略(JSP+SLSB+CMP),在不同的出发点上,也都是不错的选择。

Webwork+Spring(WS)的组合:
  首先来看,WS组合中,Webwork和Spring各司何职?
  场景有点类似在Pizzahut 用餐,伺服人员(Webwork)负责接受客户定餐(请求),并将
 用户口头的定餐要求转化为统一的内部数据格式(Pizzahut 订单),然后将订单递交给厨师
 制作相应的餐点(执行Action),之后再从厨房将餐点送到客户餐位。而厨师具体如何操作,
 伺服并不参与。
  定单传递到厨师手上之后,厨师即按照烹饪流程(业务逻辑)开始制作餐点,烹饪的
 过程中,厨具必不可少,厨具可以选用乡间的柴灶、锅、碗、瓢、盆五件套,也可以选择
 自动化的配套厨具。而后者就是spring。

 webwork2-spring.jar 中包含了Spring与Webwork融合所需的类库。

51job、chinahr 这些人力资源网站上搜索一下Java Web 程序员应聘简历。几乎所有JavaWeb 开发人员都在简历上注明“精通Struts”

采用Struts+Spring (SS)组合:
通过plug-in我们实现了Spring Context的加载。
<struts-config>
 <plug-in
  className="org.springframework.web.struts.ContextLoaderPlugIn">
  <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
 </plug-in>
</struts-config>
我们还需要修改配置,将Struts Action交给Spring容器进行管理:
既然Action已经由Spring全权接管,那么我们就可以将此Action看作是Spring中的一个Bean,

这样,Spring Bean Name与Struts Action Path相关联,当Struts加载对应的Action时,
DelegatingActionProxy就根据传入的path属性,在Spring Context寻找对应的bean,并将其
实例返回给Struts。


推荐书籍:
 这里推荐笔者最欣赏的两本Struts书籍《Programming Struts》和《Jakarta-Struts Live》,
 前者的译版已经在国内发行,后者可从theserverside.com上免费下载。
 《Hibernate开发指南》http://www.xiaxin.net/Hibernate_DEV_GUIDE.rar
 《ibatis开发指南》http://www.xiaxin.net/ibatis_Guide.rar
 关于Spring Framework,请参见笔者另一篇文档:
 《Spring 开发指南》http://www.xiaxin.net/Spring_Dev_Guide.rar


<property name="transactionAttributes"> // 事务属性指:启动下面的pro操作时启动事务来进行处理!
 <props>
  <prop key="insert*">PROPAGATION_REQUIRED</prop>  
  <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
  <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
 </props>
</property>

在数据持久层的杰出贡献,可能是Spring最为闪亮的优点。
本质上来讲,Spring的事务管理是基于动态AOP

propagation_required propagation_required,readonly

Spring可以将任意Java Class 纳入事务管理

即使系统并没有采用Spring作为结构性框架,我们也可以单独使用Spring的JDBC部分(spring-dao.jar)来改善我们的代码。

9 SQL Injection: SQL语句中直接引入参数值而导致的系统漏洞,具体请参见以下论文:
http://www.governmentsecurity.org/articles/SQLInjectionModesofAttackDefenceandWhyItMatters.php

spring的持久层封装中的JDBC:DAO层中注入dataSource,transactionManager。

org.springframework.transaction.support.TransactionTemplate。
TransactionTemplate封装了事务管理的功能,包括异常时的事务回滚,以及操作成功后的事务提交。

IUserDAO userDAO = (IUserDAO)factory.getBean("userDAOProxy");
Spring中的事务管理实际上是基于动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java Dynamic Proxy,
但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备进行代理的方法。
因此实现了面向接口的编程!至于接口到其实现类的调用则由java的 dynamic proxy(自动代理)来实现!

hibernate,ibatis底层都是使用jdbc连接数据库,所以它们的配置文件中的驱动都是jdbc的驱动!

配置文件中:SqlMapClient 之于 ibatis,类似于 Session 之于 Hibernate,Connection 之于 JDBC。前者配置的都是一个工厂类!

AOP:编译成【面向切面编程】更合适!

OOP与AOP的区别:
 OOD/OOP面向名词领域,AOP面向动词领域。
 OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。面向粗的方面!
 AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。面向细的方面!
 
 AOP和OOD/OOP并不冲突,我们完全可以在一个应用系统中同时应用OOD/OOP和AOP设计思想,
 通过OOD/OOP对系统中的业务对象进行建模,同时通过AOP对实体处理过程中的阶段进行隔离处理。
 即使不是OOD/OOP,而是在传统的POP(面向过程编程)中,AOP也能起到同样的作用。

 AOP具有源码组成无关性:简单来讲,就是应用代码可以脱离AOP组件独立编译。
 为了实现源码组成无关性,AOP往往通过预编译方式(如AspectJ)和运行期动态代理模式(如Spring AOP 和JBoss AOP)实现。

 处理逻辑(Advice),而不是“通知”:在某个连接点所采用的处理逻辑

“null!=tx”:这种写法可以避免空指针的异常!
查询:“JTA事务管理” 是什么?
Dynamic Proxy是面向接口的动态代理实现,其代理对象必须是某个接口的实现。
CGLib 与Spring AOP:
 Spring中,引入了CGLib作为无接口情况下的动态代理实现。
 换句话说,Dynamic Proxy返回的动态代理类,是目标类所实现的接口的另一个实现版本,它实现了对目标类的代理(如同UserDAOProxy与UserDAOImp的关系)。
 而CGLib返回的动态代理类,则是目标代理类的一个子类(代理类扩展了UserDAOImp类)。

目前最为实用的AOP应用,可能就是Spring中基于AOP实现的事务管理机制,也正是这一点,使得Spring AOP大放异彩。

spring中的AOP逻辑处理单元,也就是所谓的Advice,提供了针对PointCut的预处理、后处理过程等的支持。分为以下几种:
 1. Interception around advice // 环绕逻辑处理拦截器
 2. Before advice
 3. Throws advice
 4. After Returning advice
 5. Introduction advice  // 通过Introduction advice我们可以实现多线程访问中的类锁定。

Spring中采用了AOP联盟(AOP Alliance)12的通用AOP接口(接口定义位于aopalliance.jar)  http://aopalliance.sourceforge.net/

搞明白java里的动态代理是怎么回事!再搞明白spring里的动态机制!前后者的关系?

Hibernate/OJB,OJB是什么呢?

从ibatis映射文件可以看出,通过<insert>、<delete>、<update>、<select>四个节点,我们分别定义了针对TUser 对象的增删改查操作。

ibatis配置文件中Statement配置包含了数个与SQL Statement相关的节点,分别为:
 statement、insert、delete、update、select、procedure

ibatis实现了一对多的映射 和 动态查询条件映射!

对当前Session(可简单理解为当前线程)

 

你可能感兴趣的:(每日笔记)