一struts 与 spring
struts 本身就采用了类似于spring的IOC容器机制可以利用struts官方提供的插件strutsspringpluginjar直接与spring进行整合配置文件中只需要设置
strutsobjectFactory=spring
这样就将struts的对象管理交给了spring的IOC容器
在strutsxml中配置的action
<package name=maintaince extends=strutsdefault>
<action name=serverInfoList class=serverInfoService method=getAllServersInfo>
<result name=list>/jsp/server_info/server_info_listjsp</result>
</action>
在spring的配置文件中配置的bean
<bean id=serverInfoService class=comwodserviceimplServerInfoServiceImpl>
<property name=serverInfoDao ref=serverInfoDao/>
<property name=sib ref=serverInfoBean/>
</bean>
可以看出struts可以直接只用在spring中配置的bean引用过来作为action
这样struts就可以跑在spring里面了
另外在webxml中还有这些内容
<contextparam>
<paramname>contextConfigLocation</paramname>
<paramvalue>classpath:properties/workassistant*xml</paramvalue>
</contextparam>
加载spring的配置文件
<listener>
<listenerclass>orgsprntextContextLoaderListener</listenerclass>
</listener>
设置spring的context listener
<filter>
<filtername>struts</filtername>
<filterclass>orgapachestrutsdispatcherFilterDispatcher</filterclass>
</filter>
<filtermapping>
<filtername>struts</filtername>
<urlpattern>/*</urlpattern>
</filtermapping>
设置struts的dispatcher
二hibernate 与 spring
Spring 与 hibernate结合的时候配置文件修改比较多首先是hibernate的自身的配置被集成到了spring的配置文件中了
配置datasource:
<bean id=dataSource class=orgspringframeworkjdbcdatasourceDriverManagerDataSource
p:driverClassName=${nnectiondriver_class}
p:url=${nnectionurl}
p:username=${nnectionusername}
p:password=${nnectionpassword}/>
.配置sessionFactory
<bean id=sessionFactory
class=orgspringframeworkormhibernateannotationAnnotationSessionFactoryBean scope=prototype>
<property name=dataSource ref=dataSource />
<property name=annotatedClasses><! or use <property name=annotatedPackages> >
<list>
<value>comwodbeanApplication</value>
</list>
</property>
<property name=hibernateProperties>
<props>
<prop key=hibernatehbmddlauto>create</prop>
<prop key=hibernatedialect>${hibernatedialect}</prop>
<prop key=hibernateshow_sql>${hibernateshow_sql}</prop>
<prop key=hibernategenerate_statistics>${hibernategenerate_statistics}</prop>
</props>
</property>
<property name=eventListeners>
<map>
<entry key=merge>
<bean class=orgspringframeworkormhibernatesupportIdTransferringMergeEventListener/>
</entry>
</map>
</property>
</bean>
这两个bean是spring结合hibernate的最主要的两个bean
当这两个bean设置好了之后就可以直接使用spring提供的HibernateDaoSupport 直接使用封装好的hibernate特性非常方便
<bean id=serverInfoDao class=comwoddbhibernateServerInfoDAO>
<property name=sessionFactory ref=sessionFactory/>
</bean>
初始化一个DAO
public List<ServerInfoBean> getAllServersInfo() {
List<ServerInfoBean> find = getHibernateTemplate()loadAll(ServerInfoBeanclass);
return find;
}
直接调用getHibernateTemplate()访问数据库
三.Spring 事务的设置
.设置transactionManager
<bean id=transactionManager class=orgspringframeworkormhibernateHibernateTransactionManager
p:sessionFactoryref=sessionFactory/>
设置advice
<tx:advice id=txAdvice transactionmanager=transactionManager>
<tx:attributes>
<tx:method name=find* readonly=true/>
<tx:method name=get* readonly=true/>
<tx:method name=list* readonly=true/>
<tx:method name=* rollbackfor=Exception/>
</tx:attributes>
</tx:advice>
.接下来设置AOP
<aop:config>
<aop:pointcut id=businessService expression=execution(* comhisoftdbhibernateimpl**()) />
<aop:advisor adviceref=txAdvice pointcutref=businessService />
<aop:aspect id=businessAspect ref=AOPTest>
<aop:before pointcutref=businessService method=before/>
<aop:afterreturning pointcutref=businessService method=after/>
</aop:aspect>
</aop:config>
这个的意思是说当执行到comhisoftdbhibernateimpl这个包下面的任何类的任何方法而且不管参数是什么也就是说这个包下面的所有方法调用了都要接受前面的transactionManager的管理
AOP设置
<bean id=AOPTest class=monLogHandlerAOPTest/>
<aop:config>
<aop:pointcut id=businessService expression=execution(* comhisoftdbhibernateimpl**()) />
<aop:advisor adviceref=txAdvice pointcutref=businessService />
<aop:aspect id=businessAspect ref=AOPTest>
<aop:before pointcutref=businessService method=before/>
<aop:afterreturning pointcutref=businessService method=after/>
</aop:aspect>
</aop:config>
定义一个切面叫做businessAspect引用的是我前面定义的一个叫做AOPTest的类然后下面的两句话
<aop:before pointcutref=businessService method=before/>
<aop:afterreturning pointcutref=businessService method=after/>
aop:before 指的是在调用目标方法之前要干点事情pointcutref=businessService就是目标的方法在调用匹配这个pointcut 的方法之前会调用 method中定义的那个方法