1、在web.xml中加载Spring的配置文件
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/*.xml</param-value>
</context-param>
<!--Spring ApplicationContext 载入 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
2、配置属性文件
<!-- 属性文件读入 -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:config/ct-db-c3p0.properties</value>
<value>classpath*:config/mail.properties</value>
</list>
</property>
</bean>
3、配置数据源
<!-- 数据源定义,使用Apache c3p0 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${....common.dbutils.c3p0.driver}" />
<property name="jdbcUrl" value="${....common.dbutils.c3p0.url}" />
<property name="user" value="${....common.dbutils.c3p0.user}" />
<property name="password" value="${....common.dbutils.c3p0.password}" />
<property name="maxStatementsPerConnection" value="${....common.dbutils.c3p0.maxStatementsPerConnection}"/>
<property name="checkoutTimeout" value="${....common.dbutils.c3p0.checkoutTimeout}"/>
<property name="initialPoolSize" value="${....common.dbutils.c3p0.initialPoolSize}"/>
<property name="minPoolSize" value="${....common.dbutils.c3p0.minPoolSize}"/>
<property name="maxPoolSize" value="${....common.dbutils.c3p0.maxPoolSize}"/>
<property name="maxStatements" value="${....common.dbutils.c3p0.maxStatements}"/>
<property name="acquireIncrement" value="${....common.dbutils.c3p0.acquireIncrement}"/>
<property name="maxIdleTime" value="${....common.dbutils.c3p0.maxIdleTime}"/>
</bean>
<!--Hibernate SessionFatory-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="annotatedClasses">
<list>
<!--添加bean -->
<value>....bean.AddressBook</value>
.......
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">false</prop>
<prop key="hibernate.generate_statistics">false</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>
<!--Hibernate TransactionManager-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
4、依赖注入配置
<bean id="companyAction" class="....action.CompanyAction" scope="request"></bean>
<bean name="companyBaseModel" class="....CompanyBaseModel"></bean>
<bean class="....CompanyService" id="companyService"></bean>
<bean class="....CompanyDAO" id="companyDAO"></bean>
注:对beans的设置
<beans default-autowire="byName" default-lazy-init="true">...</beans>
5、Spring怎样注入Class<T>(泛型类型对象)?
在事务配置时,将proxy-target-class设置为false即可。不能为true,因为要针对接口代理。
如:<aop:config proxy-target-class="false">
6、Spring中采用构造方法注入注意要点:
在配置文件中显式书写注入的参数。如:
<bean class="....impl.JobService"
id="retJobService">
<constructor-arg ref="retJobDao" />
</bean>
多个参数的构造函数示例
<bean class="....impl.TypeService"
id="typeService">
<constructor-arg index="0" ref="typeDAO" />
<constructor-arg index="1" type="boolean">
<value>false</value>
</constructor-arg>
</bean>
7、Spring 2.0 结合AspectJ pointcut语法配置AOP详解
Spring参考文档 7.3 chema-based AOP support 提供了aspect,advisor,advide三种组装方法的解释,其中aspect是aspectJ原装,但稍复杂,
<aop:config proxy-target-class="true">
<aop:advisor pointcut="execution(* *..BookManager.save(..))||execution(* *..BookManager.remove(..))" advice-ref="lowStockBookFlushingAdvice"/>
<aop:advisor pointcut="execution(* *..BookStockChecker.getLowStockBooks())" advice-ref="lowStockBookCachingAdvice"/>
</aop:config>
以上几句定义使用cglib创建Proxy, 为BookManager的save()和remove()加上lowStockBookFlushingAdvice,为BookStockChecker.getLowStockBooks加上lowStockBookCachingAdvice.
execution(* *..BookManager.save(..))
第一颗* 代表ret-type-pattern 返回值可任意,
*..BookManager 代表任意Pacakge里的BookManager类。
如果写成com.xyz.service.* 则代表com.xyz.service下的任意类
com.xyz.service..* com.xyz.service则代表com.xyz.service及其子package下的任意类
save代表save方法,也可以写save* 代表saveBook()等方法
(..) 匹配0个参数或者多个参数的,任意类型
(x,..) 第一个参数的类型必须是X
(x,*,*,s,..) 匹配至少4个参数,第一个参数必须是x类型,第二个和第三个参数可以任意,第四个必须是s类型。
8、事务配置的不同形式
事务配置一:
<!-- 支持 @AspectJ 标记-->
<aop:aspectj-autoproxy />
<!-- 以AspectJ方式 定义 AOP -->
<aop:config proxy-target-class="false">
<aop:advisor
pointcut="execution(* ....recruitment.service.impl..*.*(..)) || execution(* ....employeeinfo.service.impl..*Service.*(..))"
advice-ref="txAdvice" />
</aop:config>
<!-- 基本事务定义,使用transactionManager作事务管理,默认get*方法的事务为readonly,其余方法按默认设置.
默认的设置请参考Spring文档事务一章. -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" propagation="REQUIRED" />
<tx:method name="load*" read-only="true" propagation="REQUIRED" />
<tx:method name="find*" read-only="true" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
事务配置二:
<!-- 支持 @AspectJ 标记-->
<aop:aspectj-autoproxy />
<!-- 以AspectJ方式 定义 AOP -->
<aop:config proxy-target-class="false">
<aop:advisor
pointcut="execution(* ....employeeinfo.service.impl..*Service.*(..))"
advice-ref="txAdvice" />
<aop:advisor
pointcut="execution(* ....recruitment.service.impl..*.*(..)) "
advice-ref="txAdviceRet" />
</aop:config>
<!-- 基本事务定义,使用transactionManager作事务管理,默认get*方法的事务为readonly,其余方法按默认设置.
默认的设置请参考Spring文档事务一章. -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
......
</tx:attributes>
</tx:advice>
<tx:advice id="txAdviceRet"
transaction-manager="transactionManager">
<tx:attributes>
.........
</tx:attributes>
</tx:advice>
事务配置三:(在java文件中配置)
需要单独配置事务的类名前配置事务开启
@Transactional(propagation = Propagation.SUPPORTS)
需要使用事务的方法前配置开启事务的信息
@Transactional(propagation = Propagation.REQUIRED)
如:
@Transactional(propagation = Propagation.SUPPORTS)
public class ApplierService extends BaseService<Applier> implements
IApplierService {
@Transactional(propagation = Propagation.REQUIRED)
public void addOrModify(Applier t) {
applierDao.saveOrUpdate(toDBValue(t));
}
}
9、正确配置重写父类方法时事务
参阅:
http://aumy2008.iteye.com/admin/blogs/152928
10、spring中bean的作用域详解
bean属性scope的选取(prototype、request、session、global session):
<bean name="companyAction"
class="....CompanyAction" scope="prototype"/>
s:datetimepicker录入框提交正常。
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)
都会产生一个新的bean实例,相当一个new的操作,对于prototype作用域的bean,有一点非常重要,
那就是Spring不能对一个prototype bean的整个生命周期负责,
容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,
随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,
而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。
清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。
(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用bean的后置处理器,
该处理器持有要被清除的bean的引用。)
request、session、global session使用的时候首先要在web.xml中做如下配置:
如果你使用的是Servlet 2.4及以上的web容器,那么你仅需要在web应用的XML声明文件web.xml中增加下述ContextListener即可:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<bean name="companyAction"
class="....action.CompanyAction" scope="request"/>
s:datetimepicker录入框提交正常。
<bean name="companyAction"
class="....action.CompanyAction" scope="session"/>
s:datetimepicker录入框不能正常提交。
<bean name="companyAction"
class="....action.CompanyAction" scope="global session"/>
java.lang.IllegalStateException: No Scope registered for scope 'global session'
分析:global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。
Spring中bean的作用域相关网站:
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch03s04.html
分享到:
相关推荐
论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts 2+Hibernate+Spring实现)论坛系统项目(Struts...
"educationSelectItemInfos" executeResult="false" /> ...在实际项目中,还需要结合Hibernate进行持久层操作,以及Spring进行依赖注入和事务管理,共同构建出完整的SSH(Struts2 + Hibernate + Spring)企业级应用。
网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring实现)网络硬盘(Struts 2+Hibernate+Spring...
Struts 2、Hibernate 和 Spring 是 Java Web 开发中的三个重要框架,它们组合起来可以构建高效、可维护的Web应用程序,尤其是对于复杂的企业级论坛系统。这个基于Struts 2+Hibernate+Spring实现的论坛系统,充分利用...
公文管理、申请审批、公告管理、会议管理、权限管理、个人办公、客户管理、人事等等。项目技术:Struts1.2 + Hibernate3.0 + Spring2 +DWR。java毕业设计 jsp毕业设计 ssh毕业设计
毕业设计 基于SSH2新闻发布管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成
Java Web整合开发实战--基于Struts 2+Hibernate+Spring.pdf 1章 Web的工作机制 2章 搭建Java Web开发环境 3章 JSP及其相关技术 2篇 表现层框架Struts技术 4章 Struts快速上手 5章 解密Struts之核心文件 6章 ...
【SSH 注解开发】是Java Web开发中一种常见的技术栈组合,由Struts2、Hibernate和Spring框架共同构建。这个学生信息管理系统就是基于这种技术栈,利用注解的方式来简化配置,提高开发效率。 Struts2作为MVC(模型-...
总的来说,基于Struts2+Spring+Hibernate+MySql的注册登录系统是利用这些技术协同工作,实现了用户注册、登录的基本功能。Struts2处理请求,Spring管理组件和事务,Hibernate负责数据持久化,而MySql存储数据。...
适合初学ssh 三大框架...这是刚学三大框架的时候做的一个小练习。是用myeclipse做的,导入一下,然后把数据库文件也导入一下,在apllicationcontex。xml文件中把数据库密码修改一下,我的是空,根据你的数据库修改一下
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6。 此外,还有:log4j、slf4j、junit4、ehcache等知识点。 项目...
一个简单的spring+struts2+hibernate+mybatis整合(数据库脚本放在项目资源文件的sql目录下) 因为没想好mvc用springmvc好,还是struts2好 所以没有整合进去
《JavaEE实用开发指南:基于Weblogic+EJB3+Struts2+Hibernate+Spring》-- part2/3
这个项目整合了三个关键的开源框架:Struts2、Hibernate和Spring,它们在Java Web开发中扮演着重要角色。 【Struts2】作为MVC(模型-视图-控制器)架构的框架,负责处理HTTP请求,控制应用程序流程,并将数据传递给...
Struts2+Hibernate+Spring整合开发技术详解19章网上书店完整源码(内附数据库导出文件) 与书上最后一章内容完全对应 可以结合书上教程进行最后一章学习
【标题】:“全套源码-论坛系统(Struts 2+Hibernate+Spring实现)”揭示了一个基于Java技术栈开发的论坛系统,它整合了三个重要的框架:Struts 2、Hibernate和Spring。这个项目旨在提供一个完整的解决方案,帮助...
毕业设计 基于SSH2高校协会管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成高校协会管理系统
毕业设计 基于SSH2商品进销存管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成
Struts 2+Hibernate+Spring整合开发技术详解sample.pdf
一个Struts2+Hibernate+Spring例题 一个Struts2+Hibernate+Spring例题 一个Struts2+Hibernate+Spring例题 一个Struts2+Hibernate+Spring例题 一个Struts2+Hibernate+Spring例题