一.spring+struts
1.加載springContext
????? 通過struts-config.xml中增加plug-in插件來加載springContext
?? <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
???? <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
?? </plug-in>
?? applicationContext.xml為spring的配置文件
2.將strutsAction交給Spring容器進行管理
????? 修改struts-config.xml中的action屬性,action的type值不指定具體的實現類,統一修改成代理類
?? ? <action input="/login.jsp"
???????? name="loginActionForm"
???????? path="/loginAction"?
??????? ?scope="request"???
???????? type="org.springframework.web.struts.DelegatingActionProxy"
???????? validate="false">
????? <forward name="success" path="/success.jsp" />
????? <forward name="failure" path="/failure.jsp" />
??? </action>
3.在applicationContext.xml中的bean name值設定與struts-config.xml中action path值相對應,以使代理類 DelegatingActionProxy能夠根據傳入的path在springContext中找到相應的bean,并將實例返回給struts.
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
? <property name="login">
??? <ref bean="loginBOProxy" />
? </property>
</bean>
二.spring+hibernate
?? 1.dateSource
????? 在springContext中設置dateSource Bean
???? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
??????? <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
????? ? <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
?????? ?<property name="username" value="it"></property>
??????? <property name="password" value="it"></property>
???? </bean>
?????2.sessionFactory
?????? 在springContext中設置sessionFactory Bean
? <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
????<property name="dataSource" ref="dataSource"></property>
????<property name="mappingResources">
????????<list>
??????????<value>hbm\OvertimeRecord.hbm.xml</value><!--hbm映射文件-->
??????????<value>hbm\OvertimePermit.hbm.xml</value>
????????</list>
????</property>
????<property name="hibernateProperties">
????????<props>
???????????<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
???????????<prop key="hibernate.show_sql">true</prop>
???????????<prop key="hibernate.jdbc.fetch_size">50</prop>
???????????<prop key="hibernate.jdbc.batch_size">20</prop>
??????? </props>
????</property>
??</bean>
?
? 3.transactionManager
?? 在springContext中設置transactionManager Bean
?? <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
???? <property name="sessionFactory">
?????? <ref local="sessionFactory" />
???? </property>
?? </bean>
?? 4.DAO bean
????? <bean id="Ilogin" class="com.derek.business.Login">
???????? ?<property name="sessionFactory">
???????? ???? <ref local="sessionFactory"/>
??????? ? </property>
????? </bean>
????? public class Login extends HibernateDaoSupport implements LoginInterface
??????DAO 繼承HibernateDaoSupport
????? HibernateSupport實現了HibernateTemplate和SessionFactory實例的關聯, HibernateTemplate對Hibernate Session操作進行了封裝,HibernateTemplate.execute方法則是一封裝機制的核心. 借助HibernateTemplate我們可以脫離每次數據操作必須首先獲得Session實例、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作.
??????? Spring中的事務管理實際上是基于動態AOP機制實現,為了實現動態AOP,Spring在默認情況下會使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的對象必須實現一個接口,該接口定義了準備進行代理的方法。而對于沒有實現任何接口的Java Class,需要采用其他方式,Spring通過CGLib實現這一功能。
?? 5.DAOProxy 代理bean
??????? 通過代理,將上面的DAO bean 納入到spring容器的事務管理中,并在其中設置對哪些方法進行事務管理
?????<bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
???????????<property name="transactionManager">
??????????????? <ref bean="transactionManager" />
???????????</property>
???????????<property name="target">
????????????????<ref local="Ilogin" /> <!--所代理的bean-->
???????????</property>
???????????<property name="transactionAttributes">
??????????????? <props>
?????????????????????<prop key="insert*">PROPAGATION_REQUIRED</prop> <!--以insert開頭的方法加入事務管理-->
???????????????????? <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <!--以get開頭的方法只讀-->
????????????????</props>
???????????</property>
??????</bean>
????
??? 6.action bean
????? <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
??????? ?<property name="login">
??????????? <ref bean="loginBOProxy" /> <!--要將其使用的DAO bean加入事務管理,就必須ref他的代理bean,且在LoginAction中該屬性須由其接口強制類型轉換-->
???????? </property>
????? </bean>
示例代碼:
? struts-conifg.xml
? applicationContext.xml
LoginInterface
Login
RecordDaoInterface
RecordDao
LoginAction通過容器注入的Login實例完成業務操作(必須由接口強制類型轉化)
你好!
我在調試過程中遇到下面的問題,請指教
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/appcontext.xml]: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: org.dom4j.DocumentException: null Nested exception: null
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.startup.Catalina.start(Catalina.java:556)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
re: Spring+Hibernate+Struts 2006-07-24 22:01 han
appcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>person/Info.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="personService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="myTransactionManager"/>
</property>
<property name="target">
<ref local="personServiceImp"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update">PROPAGATION_REQUIRED</prop>
<prop key="delete">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="personDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>person.PersonDao</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
<value>personDaoTarget</value>
</list>
</property>
</bean>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="personServiceImp" class="person.PersonServiceImp">
<property name="person">
<ref local="personDao"/>
</property>
</bean>
<bean id="personDaoTarget" class="person.PersonDaoImp">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
??回復
??
1.加載springContext
????? 通過struts-config.xml中增加plug-in插件來加載springContext
?? <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
???? <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
?? </plug-in>
?? applicationContext.xml為spring的配置文件
2.將strutsAction交給Spring容器進行管理
????? 修改struts-config.xml中的action屬性,action的type值不指定具體的實現類,統一修改成代理類
?? ? <action input="/login.jsp"
???????? name="loginActionForm"
???????? path="/loginAction"?
??????? ?scope="request"???
???????? type="org.springframework.web.struts.DelegatingActionProxy"
???????? validate="false">
????? <forward name="success" path="/success.jsp" />
????? <forward name="failure" path="/failure.jsp" />
??? </action>
3.在applicationContext.xml中的bean name值設定與struts-config.xml中action path值相對應,以使代理類 DelegatingActionProxy能夠根據傳入的path在springContext中找到相應的bean,并將實例返回給struts.
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
? <property name="login">
??? <ref bean="loginBOProxy" />
? </property>
</bean>
二.spring+hibernate
?? 1.dateSource
????? 在springContext中設置dateSource Bean
???? <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
??????? <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver"></property>
????? ? <property name="url" value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
?????? ?<property name="username" value="it"></property>
??????? <property name="password" value="it"></property>
???? </bean>
?????2.sessionFactory
?????? 在springContext中設置sessionFactory Bean
? <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
????<property name="dataSource" ref="dataSource"></property>
????<property name="mappingResources">
????????<list>
??????????<value>hbm\OvertimeRecord.hbm.xml</value><!--hbm映射文件-->
??????????<value>hbm\OvertimePermit.hbm.xml</value>
????????</list>
????</property>
????<property name="hibernateProperties">
????????<props>
???????????<prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
???????????<prop key="hibernate.show_sql">true</prop>
???????????<prop key="hibernate.jdbc.fetch_size">50</prop>
???????????<prop key="hibernate.jdbc.batch_size">20</prop>
??????? </props>
????</property>
??</bean>
?
? 3.transactionManager
?? 在springContext中設置transactionManager Bean
?? <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
???? <property name="sessionFactory">
?????? <ref local="sessionFactory" />
???? </property>
?? </bean>
?? 4.DAO bean
????? <bean id="Ilogin" class="com.derek.business.Login">
???????? ?<property name="sessionFactory">
???????? ???? <ref local="sessionFactory"/>
??????? ? </property>
????? </bean>
????? public class Login extends HibernateDaoSupport implements LoginInterface
??????DAO 繼承HibernateDaoSupport
????? HibernateSupport實現了HibernateTemplate和SessionFactory實例的關聯, HibernateTemplate對Hibernate Session操作進行了封裝,HibernateTemplate.execute方法則是一封裝機制的核心. 借助HibernateTemplate我們可以脫離每次數據操作必須首先獲得Session實例、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作.
??????? Spring中的事務管理實際上是基于動態AOP機制實現,為了實現動態AOP,Spring在默認情況下會使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的對象必須實現一個接口,該接口定義了準備進行代理的方法。而對于沒有實現任何接口的Java Class,需要采用其他方式,Spring通過CGLib實現這一功能。
?? 5.DAOProxy 代理bean
??????? 通過代理,將上面的DAO bean 納入到spring容器的事務管理中,并在其中設置對哪些方法進行事務管理
?????<bean id="loginBOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
???????????<property name="transactionManager">
??????????????? <ref bean="transactionManager" />
???????????</property>
???????????<property name="target">
????????????????<ref local="Ilogin" /> <!--所代理的bean-->
???????????</property>
???????????<property name="transactionAttributes">
??????????????? <props>
?????????????????????<prop key="insert*">PROPAGATION_REQUIRED</prop> <!--以insert開頭的方法加入事務管理-->
???????????????????? <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <!--以get開頭的方法只讀-->
????????????????</props>
???????????</property>
??????</bean>
????
??? 6.action bean
????? <bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
??????? ?<property name="login">
??????????? <ref bean="loginBOProxy" /> <!--要將其使用的DAO bean加入事務管理,就必須ref他的代理bean,且在LoginAction中該屬性須由其接口強制類型轉換-->
???????? </property>
????? </bean>
示例代碼:
? struts-conifg.xml
<?
xml?version
=
"
1.0
"
?encoding
=
"
UTF-8
"
?>
<! DOCTYPE?struts - config?PUBLIC? " -//Apache?Software?Foundation//DTD?Struts?Configuration?1.1//EN " ? " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd " >
< struts - config >
?? < form - beans >
???? < form - bean?name = " loginActionForm " ?type = " com.derek.form.LoginActionForm " ? />
?? </ form - beans >
?? < action - mappings >
???? < action?input = " /login.jsp " ?name = " loginActionForm " ?path = " /loginAction " ?scope = " request " ?type = " org.springframework.web.struts.DelegatingActionProxy " ?validate = " false " >
?????? < forward?name = " success " ?path = " /success.jsp " ? />
?????? < forward?name = " failure " ?path = " /failure.jsp " ? />
???? </ action >
?? </ action - mappings >
?? < plug - in?className = " org.springframework.web.struts.ContextLoaderPlugIn " >
???? < set - property?property = " contextConfigLocation " ?value = " /WEB-INF/applicationContext.xml " ? />
?? </ plug - in >
</ struts - config >
<! DOCTYPE?struts - config?PUBLIC? " -//Apache?Software?Foundation//DTD?Struts?Configuration?1.1//EN " ? " http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd " >
< struts - config >
?? < form - beans >
???? < form - bean?name = " loginActionForm " ?type = " com.derek.form.LoginActionForm " ? />
?? </ form - beans >
?? < action - mappings >
???? < action?input = " /login.jsp " ?name = " loginActionForm " ?path = " /loginAction " ?scope = " request " ?type = " org.springframework.web.struts.DelegatingActionProxy " ?validate = " false " >
?????? < forward?name = " success " ?path = " /success.jsp " ? />
?????? < forward?name = " failure " ?path = " /failure.jsp " ? />
???? </ action >
?? </ action - mappings >
?? < plug - in?className = " org.springframework.web.struts.ContextLoaderPlugIn " >
???? < set - property?property = " contextConfigLocation " ?value = " /WEB-INF/applicationContext.xml " ? />
?? </ plug - in >
</ struts - config >
? applicationContext.xml
<?xml?version="1.0"?encoding="UTF-8"?>
<!DOCTYPE?beans?SYSTEM?"D:\JAVA\MyWork\SpringDemo\SpringWeb\WEB-INF\spring-beans.dtd">
<!--DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"-->
<!--
??-?Root?application?context?for?the?Countries?application.
??-?Web-specific?beans?are?defined?in?"countries-servlet.xml".
??-->
<beans>
<bean?id="dataSource"?class="org.springframework.jdbc.datasource.DriverManagerDataSource">
?<property?name="driverClassName"?value="net.sourceforge.jtds.jdbc.Driver"></property>
?<property?name="url"?value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
?<property?name="username"?value="it"></property>
?<property?name="password"?value="itservice"></property>
</bean>
<bean?id="sessionFactory"?class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
?<property?name="dataSource"?ref="dataSource"></property>
?<property?name="mappingResources">
??<list>
????<value>hbm\OvertimeRecord.hbm.xml</value>
????<value>hbm\OvertimePermit.hbm.xml</value>
??</list>
?</property>
?<property?name="hibernateProperties">
??<props>
?????<prop?key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
?????<prop?key="hibernate.show_sql">true</prop>
?????<prop?key="hibernate.jdbc.fetch_size">50</prop>
?????<prop?key="hibernate.jdbc.batch_size">20</prop>
??</props>
?</property>
</bean>
<bean?id="transactionManager"?class="org.springframework.orm.hibernate3.HibernateTransactionManager">
???<property?name="sessionFactory">
???????<ref?local="sessionFactory"?/>
???</property>
</bean>
<!---------------使用JNDI數據源----------------
bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
? <value>jdbc/cqccms</value>
</property>
<property name="jndiEnvironment">
???? <props>
??????? <prop key="java.naming.factory.initial">
????????? weblogic.jndi.WLInitialContextFactory
??????? </prop>
??????? <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
??????? <prop key="java.naming.security.principal">weblogic</prop>
??????? <prop key="java.naming.security.credentials">weblogic</prop>
???? </props>???
?? </property>?
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
? lazy-init="default" autowire="default" dependency-check="default">
? <property name="environment">
???? <props>
??????? <prop key="java.naming.factory.initial">
????????? weblogic.jndi.WLInitialContextFactory
??????? </prop>
??????? <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
??????? <prop key="java.naming.security.principal">weblogic</prop>
??????? <prop key="java.naming.security.credentials">weblogic</prop>
???? </props>???
?? </property>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
? lazy-init="default" autowire="default" dependency-check="default">
? <property name="jndiTemplate">
?? <ref local="jndiTemplate" />
? </property>
? <property name="userTransactionName">
?? <value>weblogic/transaction/UserTransaction</value>
? </property>
</bean>
--------------------------------->
<bean?id="RecordDao"?class="com.derek.business.RecordDao">
??<property?name="sessionFactory">
????<ref?local="sessionFactory"/>
??</property>
</bean>
<bean?id="RecordDaoProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
??<property?name="transactionManager">
????<ref?bean="transactionManager"?/>
??</property>
??<property?name="target">
????<ref?local="RecordDao"?/>
??</property>
??<property?name="transactionAttributes">
????<props>
??????<prop?key="insert*">PROPAGATION_REQUIRED</prop>
??????<prop?key="get*">PROPAGATION_REQUIRED,readOnly</prop>
????</props>
??</property>
</bean>
<bean?id="Ilogin"?class="com.derek.business.Login">
??<property?name="sessionFactory">
????<ref?local="sessionFactory"/>
??</property>
</bean>
<bean?id="loginBOProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
??<property?name="transactionManager">
????<ref?bean="transactionManager"?/>
??</property>
??<property?name="target">
????<ref?local="Ilogin"?/>
??</property>
??<property?name="transactionAttributes">
????<props>
??????<prop?key="insert*">PROPAGATION_REQUIRED</prop>
??????<prop?key="get*">PROPAGATION_REQUIRED,readOnly</prop>
????</props>
??</property>
</bean>
<bean?name="/loginAction"?class="com.derek.action.LoginAction"?singleton="false">
??<property?name="login">
????<ref?bean="loginBOProxy"?/>
??</property>
</bean>
</beans>
<!DOCTYPE?beans?SYSTEM?"D:\JAVA\MyWork\SpringDemo\SpringWeb\WEB-INF\spring-beans.dtd">
<!--DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd"-->
<!--
??-?Root?application?context?for?the?Countries?application.
??-?Web-specific?beans?are?defined?in?"countries-servlet.xml".
??-->
<beans>
<bean?id="dataSource"?class="org.springframework.jdbc.datasource.DriverManagerDataSource">
?<property?name="driverClassName"?value="net.sourceforge.jtds.jdbc.Driver"></property>
?<property?name="url"?value="jdbc:jtds:sqlserver://192.168.56.32:1433/testDB"></property>
?<property?name="username"?value="it"></property>
?<property?name="password"?value="itservice"></property>
</bean>
<bean?id="sessionFactory"?class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
?<property?name="dataSource"?ref="dataSource"></property>
?<property?name="mappingResources">
??<list>
????<value>hbm\OvertimeRecord.hbm.xml</value>
????<value>hbm\OvertimePermit.hbm.xml</value>
??</list>
?</property>
?<property?name="hibernateProperties">
??<props>
?????<prop?key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
?????<prop?key="hibernate.show_sql">true</prop>
?????<prop?key="hibernate.jdbc.fetch_size">50</prop>
?????<prop?key="hibernate.jdbc.batch_size">20</prop>
??</props>
?</property>
</bean>
<bean?id="transactionManager"?class="org.springframework.orm.hibernate3.HibernateTransactionManager">
???<property?name="sessionFactory">
???????<ref?local="sessionFactory"?/>
???</property>
</bean>
<!---------------使用JNDI數據源----------------
bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
? <value>jdbc/cqccms</value>
</property>
<property name="jndiEnvironment">
???? <props>
??????? <prop key="java.naming.factory.initial">
????????? weblogic.jndi.WLInitialContextFactory
??????? </prop>
??????? <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
??????? <prop key="java.naming.security.principal">weblogic</prop>
??????? <prop key="java.naming.security.credentials">weblogic</prop>
???? </props>???
?? </property>?
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate" singleton="true"
? lazy-init="default" autowire="default" dependency-check="default">
? <property name="environment">
???? <props>
??????? <prop key="java.naming.factory.initial">
????????? weblogic.jndi.WLInitialContextFactory
??????? </prop>
??????? <prop key="java.naming.provider.url">t3://172.16.101.42:7001</prop>
??????? <prop key="java.naming.security.principal">weblogic</prop>
??????? <prop key="java.naming.security.credentials">weblogic</prop>
???? </props>???
?? </property>
</bean>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" singleton="true"
? lazy-init="default" autowire="default" dependency-check="default">
? <property name="jndiTemplate">
?? <ref local="jndiTemplate" />
? </property>
? <property name="userTransactionName">
?? <value>weblogic/transaction/UserTransaction</value>
? </property>
</bean>
--------------------------------->
<bean?id="RecordDao"?class="com.derek.business.RecordDao">
??<property?name="sessionFactory">
????<ref?local="sessionFactory"/>
??</property>
</bean>
<bean?id="RecordDaoProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
??<property?name="transactionManager">
????<ref?bean="transactionManager"?/>
??</property>
??<property?name="target">
????<ref?local="RecordDao"?/>
??</property>
??<property?name="transactionAttributes">
????<props>
??????<prop?key="insert*">PROPAGATION_REQUIRED</prop>
??????<prop?key="get*">PROPAGATION_REQUIRED,readOnly</prop>
????</props>
??</property>
</bean>
<bean?id="Ilogin"?class="com.derek.business.Login">
??<property?name="sessionFactory">
????<ref?local="sessionFactory"/>
??</property>
</bean>
<bean?id="loginBOProxy"?class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
??<property?name="transactionManager">
????<ref?bean="transactionManager"?/>
??</property>
??<property?name="target">
????<ref?local="Ilogin"?/>
??</property>
??<property?name="transactionAttributes">
????<props>
??????<prop?key="insert*">PROPAGATION_REQUIRED</prop>
??????<prop?key="get*">PROPAGATION_REQUIRED,readOnly</prop>
????</props>
??</property>
</bean>
<bean?name="/loginAction"?class="com.derek.action.LoginAction"?singleton="false">
??<property?name="login">
????<ref?bean="loginBOProxy"?/>
??</property>
</bean>
</beans>
LoginInterface
package?com.derek.myinterface;
public?interface?LoginInterface?{
????public?boolean?check(String?name,String?pwd);
}
public?interface?LoginInterface?{
????public?boolean?check(String?name,String?pwd);
}
Login
package?com.derek.business;
import?com.derek.myinterface.LoginInterface;
import?org.hibernate.SessionFactory;
import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import?java.util.List;
public?class?Login?extends?HibernateDaoSupport?implements?LoginInterface{
????private?SessionFactory?sessionFactory;
????private?String?hsql?=?"from?OvertimePermit?where?account=??and?password=?";
????public?Login()?{}
????public?boolean?check(String?name,String?pwd){
????????String?condition[]?=?{name,?pwd};//查詢條件
????????/**
?????????*?借助HibernateTemplate我們可以脫離每次數據操作必須首先
?????????*?獲得Session實例?、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作
?????????*/???????
????????List?l?=?this.getHibernateTemplate().find(hsql,?condition);
????????
????????if?(l.size()?>?0)?return?true;
??????????else?return?false;
????}
}
import?com.derek.myinterface.LoginInterface;
import?org.hibernate.SessionFactory;
import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import?java.util.List;
public?class?Login?extends?HibernateDaoSupport?implements?LoginInterface{
????private?SessionFactory?sessionFactory;
????private?String?hsql?=?"from?OvertimePermit?where?account=??and?password=?";
????public?Login()?{}
????public?boolean?check(String?name,String?pwd){
????????String?condition[]?=?{name,?pwd};//查詢條件
????????/**
?????????*?借助HibernateTemplate我們可以脫離每次數據操作必須首先
?????????*?獲得Session實例?、啟動事務、提交/回滾事務以及煩雜的try/catch/finally的繁瑣操作
?????????*/???????
????????List?l?=?this.getHibernateTemplate().find(hsql,?condition);
????????
????????if?(l.size()?>?0)?return?true;
??????????else?return?false;
????}
}
RecordDaoInterface
package?com.derek.myinterface;
import?java.util.List;
import?hbm.OvertimeRecord;
public?interface?IRecordDao?{
????public?List?findAll(String?hsql);
????public?void?insert(OvertimeRecord?or);
}
import?java.util.List;
import?hbm.OvertimeRecord;
public?interface?IRecordDao?{
????public?List?findAll(String?hsql);
????public?void?insert(OvertimeRecord?or);
}
RecordDao
package?com.derek.business;
import?com.derek.myinterface.IRecordDao;
import?java.util.List;
import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import?org.hibernate.SessionFactory;
import?hbm.OvertimeRecord;
public?class?RecordDao?extends?HibernateDaoSupport?implements?IRecordDao{
????private?SessionFactory?sessionFactory;
????public?RecordDao()?{
????}
????public?List?findAll(String?hsql)?{
???????return?this.getHibernateTemplate().find(hsql);
????}
????public?void?insert(OvertimeRecord?or)?{
????????this.getHibernateTemplate().saveOrUpdate(or);
????}
}
import?com.derek.myinterface.IRecordDao;
import?java.util.List;
import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import?org.hibernate.SessionFactory;
import?hbm.OvertimeRecord;
public?class?RecordDao?extends?HibernateDaoSupport?implements?IRecordDao{
????private?SessionFactory?sessionFactory;
????public?RecordDao()?{
????}
????public?List?findAll(String?hsql)?{
???????return?this.getHibernateTemplate().find(hsql);
????}
????public?void?insert(OvertimeRecord?or)?{
????????this.getHibernateTemplate().saveOrUpdate(or);
????}
}
LoginAction通過容器注入的Login實例完成業務操作(必須由接口強制類型轉化)
package?com.derek.action;
import?javax.servlet.http.*;
import?com.derek.form.*;
import?org.apache.struts.action.*;
import?org.apache.log4j.Logger;
import?com.derek.myinterface.LoginInterface;
public?class?LoginAction?extends?Action?{
????private?LoginInterface?login;
????public?ActionForward?execute(ActionMapping?actionMapping,
?????????????????????????????????ActionForm?actionForm,
?????????????????????????????????HttpServletRequest?servletRequest,
?????????????????????????????????HttpServletResponse?servletResponse)?{
????????Logger?log?=?Logger.getLogger(this.getClass().getName());
????????LoginActionForm?loginActionForm?=?(LoginActionForm)?actionForm;
????????String?name?=?loginActionForm.getName();
????????String?pwd?=?loginActionForm.getPwd();
????????boolean?TF?=?login.check(name,pwd);
????????if(TF){?log.warn("LoginSuccess------------");;return?actionMapping.findForward("success");}
??????????else{?log.warn("LoginFailure------------");;return?actionMapping.findForward("failure");}
????}
????public?void?setLogin(LoginInterface?Ilogin)?{this.login?=?Ilogin;}
????public?LoginInterface?getLogin()?{return?login;}
}
import?javax.servlet.http.*;
import?com.derek.form.*;
import?org.apache.struts.action.*;
import?org.apache.log4j.Logger;
import?com.derek.myinterface.LoginInterface;
public?class?LoginAction?extends?Action?{
????private?LoginInterface?login;
????public?ActionForward?execute(ActionMapping?actionMapping,
?????????????????????????????????ActionForm?actionForm,
?????????????????????????????????HttpServletRequest?servletRequest,
?????????????????????????????????HttpServletResponse?servletResponse)?{
????????Logger?log?=?Logger.getLogger(this.getClass().getName());
????????LoginActionForm?loginActionForm?=?(LoginActionForm)?actionForm;
????????String?name?=?loginActionForm.getName();
????????String?pwd?=?loginActionForm.getPwd();
????????boolean?TF?=?login.check(name,pwd);
????????if(TF){?log.warn("LoginSuccess------------");;return?actionMapping.findForward("success");}
??????????else{?log.warn("LoginFailure------------");;return?actionMapping.findForward("failure");}
????}
????public?void?setLogin(LoginInterface?Ilogin)?{this.login?=?Ilogin;}
????public?LoginInterface?getLogin()?{return?login;}
}
類中直接通過Context獲得bean實例(必須通過代理類獲得實例且由其接口強制類型轉化)
package?com.derek.pub;
import?org.springframework.context.ApplicationContext;
import?org.springframework.context.support.FileSystemXmlApplicationContext;
import?com.derek.myinterface.IRecordDao;
import?java.util.List;
import?hbm.OvertimeRecord;
public?class?Untitled1?{
????public?Untitled1()?{
????ApplicationContext?ctx?=?new?FileSystemXmlApplicationContext("applicationContext.xml");
????IRecordDao?recordDao?=?(IRecordDao)ctx.getBean("RecordDaoProxy");
????OvertimeRecord?newor?=?new?OvertimeRecord("004104","dada","100120","it","2006/04/02","2006/04/02","001145","david","001145","david","00","00","1","1","1","1");
????newor.setMark("0");
????recordDao.insert(newor);
????List?l?=?recordDao.findAll("from?OvertimeRecord");
????for(int?i=0;i<l.size();i++){
????OvertimeRecord?or?=?(OvertimeRecord)l.get(i);
????System.out.println(or.getId());
????}
????}
????public?static?void?main(String[]?a){
????Untitled1?u?=?new?Untitled1();
????}
}
import?org.springframework.context.ApplicationContext;
import?org.springframework.context.support.FileSystemXmlApplicationContext;
import?com.derek.myinterface.IRecordDao;
import?java.util.List;
import?hbm.OvertimeRecord;
public?class?Untitled1?{
????public?Untitled1()?{
????ApplicationContext?ctx?=?new?FileSystemXmlApplicationContext("applicationContext.xml");
????IRecordDao?recordDao?=?(IRecordDao)ctx.getBean("RecordDaoProxy");
????OvertimeRecord?newor?=?new?OvertimeRecord("004104","dada","100120","it","2006/04/02","2006/04/02","001145","david","001145","david","00","00","1","1","1","1");
????newor.setMark("0");
????recordDao.insert(newor);
????List?l?=?recordDao.findAll("from?OvertimeRecord");
????for(int?i=0;i<l.size();i++){
????OvertimeRecord?or?=?(OvertimeRecord)l.get(i);
????System.out.println(or.getId());
????}
????}
????public?static?void?main(String[]?a){
????Untitled1?u?=?new?Untitled1();
????}
}
???? ?一個Spring application context的定義能夠被很多種不同的上下文實現所讀取, 比如FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext以及XmlWebApplicationContext。 默認的情況下,一個web應用程序會從”WEB-INF/applicationContext.xml”中得到root context。 在所有的Spring應用中,XML文件中定義的application context會把所有相關的application beans連接起來, 包括Hibernate session factory以及數據訪問和業務對象(就像上面定義的那些bean)。 它們中的大部分都不會意識到被Spring容器所管理,甚至在同其他bean合作的時候, 因為它們僅僅遵循JavaBeans的規范。一個bean屬性及可以表示值參數,也可以是其他的合作bean。 下面的bean定義能夠作為Spring web MVC context的一部分,在最基礎的 application context中訪問business beans。
ApplicationContext?context?=?WebApplicationContextUtils.getWebApplicationContext(servletContext);
ProductService?productService?=?(ProductService)?context.getBean("myProductService");
ApplicationContext?context?=
????new?FileSystemXmlApplicationContext("C:/myContext.xml");
ProductService?productService?=
????(ProductService)?context.getBean("myProductService");
ApplicationContext?context?=
????new?ClassPathXmlApplicationContext("myContext.xml");
ProductService?productService?=
????(ProductService)?context.getBean("myProductService");
ProductService?productService?=?(ProductService)?context.getBean("myProductService");
ApplicationContext?context?=
????new?FileSystemXmlApplicationContext("C:/myContext.xml");
ProductService?productService?=
????(ProductService)?context.getBean("myProductService");
ApplicationContext?context?=
????new?ClassPathXmlApplicationContext("myContext.xml");
ProductService?productService?=
????(ProductService)?context.getBean("myProductService");
你好!
我在調試過程中遇到下面的問題,請指教
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/appcontext.xml]: Initialization of bean failed; nested exception is net.sf.hibernate.MappingException: org.dom4j.DocumentException: null Nested exception: null
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:403)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:252)
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:190)
org.springframework.web.context.ContextLoaderServlet.init(ContextLoaderServlet.java:83)
javax.servlet.GenericServlet.init(GenericServlet.java:211)
org.apache.catalina.startup.Catalina.start(Catalina.java:556)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:324)
org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:287)
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:425)
re: Spring+Hibernate+Struts 2006-07-24 22:01 han
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"">http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appcontext.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
??回復
??
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"">http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/appcontext.xml</param-value>
</context-param>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
??回復
??
appcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/test</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1</value>
</property>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>person/Info.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="myTransactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="personService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref local="myTransactionManager"/>
</property>
<property name="target">
<ref local="personServiceImp"/>
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="update">PROPAGATION_REQUIRED</prop>
<prop key="delete">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="personDao" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>person.PersonDao</value>
</property>
<property name="interceptorNames">
<list>
<value>hibernateInterceptor</value>
<value>personDaoTarget</value>
</list>
</property>
</bean>
<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate.HibernateInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="personServiceImp" class="person.PersonServiceImp">
<property name="person">
<ref local="personDao"/>
</property>
</bean>
<bean id="personDaoTarget" class="person.PersonDaoImp">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
??回復
??
Info.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="person">
<class
name="Person"
table="info"
>
<meta attribute="sync-DAO">false</meta>
<id
name="Id"
type="string"
column="name"
>
<generator class="sequence"/>
</id>
</class>
</hibernate-mapping>
hibernate.cfg.xml:
<hibernate-configuration>
<session-factory name="mySessionFacory">
<!-- local connection properties -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1</property>
<!-- property name="hibernate.connection.pool_size"></property -->
<!-- dialect for MySQL -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.HibernateTransactionFactory
</property>
<mapping resource="person/Info.hbm.xml" />
</session-factory>
</hibernate-configuration>
??回復
??
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="person">
<class
name="Person"
table="info"
>
<meta attribute="sync-DAO">false</meta>
<id
name="Id"
type="string"
column="name"
>
<generator class="sequence"/>
</id>
</class>
</hibernate-mapping>
hibernate.cfg.xml:
<hibernate-configuration>
<session-factory name="mySessionFacory">
<!-- local connection properties -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">1</property>
<!-- property name="hibernate.connection.pool_size"></property -->
<!-- dialect for MySQL -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.transaction.factory_class">
org.hibernate.transaction.HibernateTransactionFactory
</property>
<mapping resource="person/Info.hbm.xml" />
</session-factory>
</hibernate-configuration>
??回復
??
package person.action;
import javax.servlet.ServletContext;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import person.PersonService;
public class BaseAction extends Action {
private PersonService personService;
public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
ServletContext servletContext = actionServlet.getServletContext();
WebApplicationContext wac = null;
wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
this.personService = (PersonService) wac.getBean("personServiceImp");
}
protected PersonService getPersonService() {
return this.personService;
}
}
當我調試時,在wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 處出現異常,我想知道為什么會這樣,應該怎樣解決,請高手指教,謝謝!??回復
??
import javax.servlet.ServletContext;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionServlet;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import person.PersonService;
public class BaseAction extends Action {
private PersonService personService;
public void setServlet(ActionServlet actionServlet) {
super.setServlet(actionServlet);
ServletContext servletContext = actionServlet.getServletContext();
WebApplicationContext wac = null;
wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
this.personService = (PersonService) wac.getBean("personServiceImp");
}
protected PersonService getPersonService() {
return this.personService;
}
}
當我調試時,在wac=WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); 處出現異常,我想知道為什么會這樣,應該怎樣解決,請高手指教,謝謝!??回復
??
你用的是hibernate3.0吧! 但你的spring配置文件中不是
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
應該是:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
你試試!??回復
??
<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
應該是:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
你試試!??回復
??
在spring配置文件中配置一下action 如:
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
<property name="login">
<ref bean="loginBOProxy" />
</property>
</bean>
和在struts-config配置文件中聲明loginAction的
type = "org.springframework.web.struts.DelegatingActionProxy "
那么在action中有set,get方法, spring 會幫你注入你定義的bean,無須你再自己用WebApplicationContextUtils去獲得bean實例
<bean name="/loginAction" class="com.derek.action.LoginAction" singleton="false">
<property name="login">
<ref bean="loginBOProxy" />
</property>
</bean>
和在struts-config配置文件中聲明loginAction的
type = "org.springframework.web.struts.DelegatingActionProxy "
那么在action中有set,get方法, spring 會幫你注入你定義的bean,無須你再自己用WebApplicationContextUtils去獲得bean實例