一、配置spring文件,applicationContext-db-config.xml,如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
">
<!--tomcatJNDI配置方式配置,默认JNDI名字为default,如果修改JNDI名字,请修改本配置的jndiName属性-->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/default"/>
</bean>
<bean id="jdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor" />
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"
lazy-init="true">
<property name="nativeJdbcExtractor" ref="jdbcExtractor" />
</bean>
<!--ibatisSqlMapClient -->
<bean id="ibatisSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
scope="prototype">
<property name="configLocation" value="classpath:sqlmap-config.xml" />
<property name="lobHandler" ref="lobHandler" />
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="ibatisDao" class="com.dao.IbatisDaoImpl">
<property name="sqlMapClient" ref="ibatisSqlMapClient" />
</bean>
<!-- ibatis事务管理 -->
<bean id="ibatisTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="ibatisTxAdvice" transaction-manager="ibatisTransactionManager">
<tx:attributes>
<tx:method name="insert*" />
<tx:method name="update*" />
<tx:method name="delete*" />
<tx:method name="execute*" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor pointcut="execution(* *..*DaoFactory.*(..))"
advice-ref="ibatisTxAdvice" />
</aop:config>
</beans>
二、配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<!-- struts2中action后缀名 -->
<constant name="struts.action.extension" value="action" />
<!-- 默认编码方式 -->
<constant name="struts.i18n.encoding" value="utf-8" />
<!-- 是否为开发模式,在开发模型中可以获得更多的跟踪信息 -->
<constant name="struts.devMode" value="false" />
<!-- 标签主题 -->
<constant name="struts.ui.theme" value="xframe" />
<!-- 资源文件名称 -->
<constant name="struts.custom.i18n.resources" value="globalMessages" />
<!--静态资源文件配置 -->
<constant name="struts.serve.static" value="true" />
<!-- 在开发模式下启用 配置改变时自动加载 -->
<constant name="struts.convention.classes.reload" value="true" />
<!-- 允许Ognl表达式访问静态方法-->
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<!-- 上传文件的最大文件大小 -->
<constant name="struts.multipart.maxSize" value="20485760" />
<!-- 在寻找资源时是否忽略大小写 -->
<constant name="struts.configuration.classpath.forceLowerCase"
value="false" />
<!-- codebehind中查找action的返回结果资源时的默认文件夹 -->
<constant name="struts.codebehind.pathPrefix" value="/pages/" /
</struts>
三、IbatisDaoImpl需继承SqlMapClientDaoSupport
四、sping中 FactoryBean接口及机制
在上面的配置片段中可以,类ShopDaoRelease是我们具体的一个dao实现,其继承了SqlMapClientDaoSupport,后者暴露出一个sqlMapClient属性,用于接受Spring的注射。SqlMapClientDaoSupport会对其中封装的SqlMapClientTemplate做相应的设置,所以DAO子类便可在取用SqlMapClientTemplate时正常地工作了。
但是我们可以通过查看源码发现在SqlMapClientDaoSupport类中,关于setSqlMapClient方法的定义:
/**
* Set the iBATIS Database Layer SqlMapClient to work with.
* Either this or a "sqlMapClientTemplate" is required.
* @see #setSqlMapClientTemplate
*/
public final void setSqlMapClient(SqlMapClient sqlMapClient) {
if (!this.externalTemplate) {
this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
}
}
而我们的配置文件中名字为“sqlMapClient”的bean的类型却为org.springframework.orm.ibatis.SqlMapClientFactoryBean,而非为com.ibatis.sqlmap.client.SqlMapClient。这不免让人产生疑问,怎么能把org.springframework.orm.ibatis.SqlMapClientFactoryBean类型的实例注入给com.ibatis.sqlmap.client.SqlMapClient类型的属性呢?
这是因为Spring的机制的缘故。简单的说,如果一个bean实现了 FactoryBean接口,那么Spring就不会把该bean本身实例化并返回,而是返回该bean的getObject()返回的对象。这是Sprign的游戏规则。我们来看一眼 SqlMapClientFactoryBean的源码片段:
public class SqlMapClientFactoryBean implements FactoryBean,InitializingBean { private SqlMapClient sqlMapClient; protected SqlMapClient buildSqlMapClient(Resource configLocation,Properties properties) throws IOException { InputStream is = configLocation.getInputStream(); if (properties != null) { if (buildSqlMapClientWithInputStreamAndPropertiesMethodAvailable) { return SqlMapClientBuilder.buildSqlMapClient(is,properties); } else { return SqlMapClientBuilder.buildSqlMapClient(new InputStreamReader(is), properties); } } else { if (buildSqlMapClientWithInputStreamMethodAvailable) { return SqlMapClientBuilder.buildSqlMapClient(is); } else { return SqlMapClientBuilder.buildSqlMapClient(new InputStreamReader(is)); } } } //这里就是返回的、并会被注入到其它类里的对象 public Object getObject() { return this.sqlMapClient; } }
相关推荐
Struts1.2+Struts2.1.6+spring 2.0+hibernate3.1+Ibatis2.3 SSH
在这个“struts2+spring3+ibatis项目整合案例”中,我们将深入探讨这三个框架如何相互配合,实现项目的集成。 Struts2作为MVC(Model-View-Controller)架构的实现,主要负责处理用户请求,控制应用的流程。它提供...
Spring、Struts和Hibernate是Java开发中非常经典的三大框架,它们各自在应用程序的不同层次上发挥作用,共同构建了一个强大的企业级应用开发解决方案。Spring是全面的轻量级应用框架,Struts是一个MVC(Model-View-...
【标题】"eclipse + struts2+sping + bootstrap+juqery-ui整合源码"涉及的关键技术栈包括Eclipse开发环境、Struts2框架、Spring框架、Bootstrap前端库以及jQuery UI组件库。这些技术在Java Web开发中占据着重要地位...
Struts框架的主要功能: 1. **模型-视图-控制器**:Struts遵循MVC设计模式,分离业务逻辑、控制流程和用户界面。 2. **Action和ActionForm**:Action处理请求,ActionForm封装用户提交的数据,两者协作完成业务逻辑...
### SSH框架整合详细步骤(spring+struts2+hibernate) #### 一、整合概述 在现代Web应用开发中,SSH(Struts2、Spring、Hibernate)框架因其各自独特的功能和优势,常被组合使用以构建高效、稳定且易于维护的系统...
struts+sping+hibernate
SpringMVC是Spring实现的一个Web层,相当于Struts的框架,但是比Struts更加灵活和强大! Mybatis是 一个持久层的框架,在使用上相比Hibernate更加灵活,可以控制sql的编写,使用 XML或注解进行相关的配置!
struts+sping+hibernate
struts+sping+hibernate
struts+sping+hibernate
Spring、Hibernate和Struts是Java Web开发中的三大框架,它们的结合使用被称为SSH(Spring、Struts、Hibernate)架构,广泛应用于企业级应用的开发。这个项目是一个基于SSH的文件管理系统,虽然目前只实现了大部分...
struts+sping+hibernate qq群72861940
Struts+sping+Hibernate
struts+sping+hibernate qq群72861940
struts+sping+hibernate qq群72861940
struts+sping+hibernate qq群72861940
struts+sping+hibernate qq群72861940
struts+sping+hibernate qq群72861940
在IT行业中,Spring、Hibernate和Struts2是三个非常重要的框架,它们构成了经典的Java Web开发栈,被广泛用于实现Web应用程序的"增删改查"(CRUD)操作。在这个项目中,"北大青鸟"可能是一个教育机构,它可能在教授...