spring入門十大問題解答

1、如何學習Spring?

    你可以通過下列途徑學習spring:(1) spring下載包中doc目錄下的MVC-step-by-step和sample目錄下的例子都是比較好的spring開發的例子。

    (2) AppFuse集成了目前最流行的幾個開源輕量級框架或者工具Ant,XDoclet,Spring,Hibernate(iBATIS),JUnit,Cactus,StrutsTestCase,Canoo's WebTest,Struts Menu,Display Tag Library,OSCache,JSTL,Struts .你可以通過AppFuse源代碼來學習spring. AppFuse網站:http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse

    (3)Spring 開發指南(夏昕)(http://www.xiaxin.net/Spring_Dev_Guide.rar

    一本spring的入門書籍,裏面介紹了反轉控制和依賴注射的概念,以及spring的bean管理,spring的MVC,spring和hibernte,iBatis的結合。

    (4) spring學習的中文論壇SpringFramework中文論壇(http://spring.jactiongroup.net

    Java視線論壇(http://forum.javaeye.com)的spring欄目

    2、利用Spring框架編程,console打印出log4j:WARN Please initialize the log4j system properly?

    說明你的log4j.properties沒有配置。請把log4j.properties放到工程的classpath中,eclipse的classpath爲bin目錄,由於編譯後src目錄下的文件會拷貝到bin目錄下,所以你可以把log4j.properties放到src目錄下。

    這裏給出一個log4j.properties的例子:

    log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n

    3、出現 java.lang.NoClassDefFoundError?

    一般情況下是由於你沒有把必要的jar包放到lib中。

    比如你要採用spring和hibernate(帶事務支持的話),你除了spring.jar外還需要hibernat.jar、aopalliance.jar、cglig.jar、jakarta-commons下的幾個jar包。

    http://www.springframework.org/download.html下載spring開發包,提供兩種zip包spring-framework-1.1.3-with-dependencies.zip和spring-framework-1.1.3.zip,我建議你下載spring-framework-1.1.3-with-dependencies.zip.這個zip解壓縮後比後者多一個lib目錄,其中有hibernate、j2ee、dom4j、aopalliance、jakarta-commons等常用包。

    4、java.io.FileNotFoundException: Could not open class path resource [……hbm.xml],提示找不到xml文件?

    原因一般有兩個:(1)該xml文件沒有在classpath中。

    (2)applicationContext-hibernate.xml中的xml名字沒有帶包名。比如:<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="dataSource"/></property> <property name="mappingResources"> <list> <value>User.hbm.xml</value>         錯,改爲: <value>com/yz/spring/domain/User.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>

    5、org.springframework.beans.NotWritablePropertyException: Invalid property 'postDao' of bean class?

    出現異常的原因是在application-xxx.xml中property name的錯誤。

    <property name="……"> 中name的名字是與bean的set方法相關的,而且要注意大小寫。

    比如public class PostManageImpl extends BaseManage implements PostManage { private PostDAO dao = null;public void setPostDAO(PostDAO postDAO){ this.dao = postDAO;}那麼xml的定義應該是:<bean id="postManage" parent="txProxyTemplate"> <property name="target"> <bean class="com.yz.spring.service.implement.PostManageImpl"> <property name="postDAO"><ref bean="postDAO"/></property>    對<property name="dao"><ref bean="postDAO"/></property>             錯</bean> </property> </bean>

    6、Spring中如何實現事務管理?

    首先,如果使用mysql,確定mysql爲InnoDB類型。

    事務管理的控制應該放到商業邏輯層。你可以寫個處理商業邏輯的JavaBean,在該JavaBean中調用DAO,然後把該Bean的方法納入spring的事務管理。

    比如:xml文件定義如下:<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"><ref bean="transactionManager"/></property> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>

    <bean id="userManage" parent="txProxyTemplate"> <property name="target"> <bean class="com.yz.spring.service.implement.UserManageImpl"> <property name="userDAO"><ref bean="userDAO"/></property> </bean> </property> </bean>

    com.yz.spring.service.implement.UserManageImpl就是我們的實現商業邏輯的JavaBean.我們通過parent元素?/span>

    7、如何管理Spring框架下更多的JavaBean?

    JavaBean越多,spring配置文件就越大,這樣不易維護。爲了使配置清晰,我們可以將JavaBean分類管理,放在不同的配置文件中。 應用啓動時將所有的xml同時加載。

    比如:

    DAO層的JavaBean放到applicationContext-hibernate.xml中,商業邏輯層的JavaBean放到applicationContext-service.xml中。然後啓動類中調用以下代碼載入所有的ApplicationContext.

    String[] paths = {"com/yz/spring/dao/hibernate/applicationContext-hibernate.xml","com/yz/spring/service/applicationContext-service.xml"};ctx = new ClassPathXmlApplicationContext(paths);

    8、web應用中如何加載ApplicationContext?

    可以通過定義web.xml,由web容器自動加載。

    <servlet><servlet-name>context</servlet-name><servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class><load-on-startup>1</load-on-startup></servlet>

    <context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext-hibernate.xml</param-value><param-value>/WEB-INF/applicationContext-service.xml</param-value></context-param>

    9、在spring中如何配置的log4j?

    在web.xml中加入以下代碼即可。

    <context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/log4j.properties</param-value></context-param>

    10、Spring框架入門的編程問題解決了,我該如何更深地領會Spring框架呢?

    這兩本書你該去看看。這兩本書是由Spring的作者Rod Johnson編寫的。

    Expert One on one J2EE Design and Development Expert One on one J2EE Development Without EJB

    你也該看看martinfowler的Inversion of Control Containers and the Dependency Injection pattern.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章