﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-java有多愁-文章分类-Spring</title><link>http://www.blogjava.net/worksguo/category/26032.html</link><description>The little flower lies in the dust. It sought the path of the butterfly</description><language>zh-cn</language><lastBuildDate>Sat, 12 Apr 2008 09:42:55 GMT</lastBuildDate><pubDate>Sat, 12 Apr 2008 09:42:55 GMT</pubDate><ttl>60</ttl><item><title>Spring 编程入门</title><link>http://www.blogjava.net/worksguo/articles/192272.html</link><dc:creator>worksguo</dc:creator><author>worksguo</author><pubDate>Fri, 11 Apr 2008 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/worksguo/articles/192272.html</guid><description><![CDATA[1、如何学习Spring？<br />
<br />
你可以通过下列途径学习spring：<br />
<br />
(1) spring下载包中doc目录下的MVC-step-by-step和sample目录下的例子都是比较好的spring开发的例子。 <br />
<br />
(2) AppFuse集成了目前最流行的几个开源轻量级框架或者工具
Ant,XDoclet,Spring,Hibernate(iBATIS),JUnit,Cactus,StrutsTestCase,Canoo's
WebTest,Struts Menu,Display Tag Library,OSCache,JSTL,Struts 。<br />
<br />
你可以通过AppFuse源代码来学习spring。<br />
<br />
AppFuse网站：http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse<br />
<br />
(3)Spring 开发指南(夏昕)（http://www.xiaxin.net/Spring_Dev_Guide.rar）<br />
<br />
一本spring的入门书籍,里面介绍了反转控制和依赖注射的概念，以及spring的bean管理，spring的MVC，spring和hibernte，iBatis的结合。<br />
<br />
(4) spring学习的中文论坛<br />
<br />
SpringFramework中文论坛(http://spring.jactiongroup.net)<br />
<br />
Java视线论坛(http://forum.javaeye.com)的spring栏目<br />
<br />
2、利用Spring框架编程，console打印出log4j:WARN Please initialize the log4j system properly？<br />
<br />
说明你的log4j.properties没有配置。请把log4j.properties放到工程的classpath中，eclipse的
classpath为bin目录，由于编译后src目录下的文件会拷贝到bin目录下，所以你可以把log4j.properties放到src目录下。<br />
<br />
这里给出一个log4j.properties的例子：<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>log4j.rootLogger=DEBUG,stdout<br />
            log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />
            log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
            log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n</td>
        </tr>
    </tbody>
</table>
<br />
3、出现 java.lang.NoClassDefFoundError?<br />
<br />
一般情况下是由于你没有把必要的jar包放到lib中。<br />
<br />
比如你要采用spring和hibernate（带事务支持的话），你除了spring.jar外还需要hibernat.jar、aopalliance.jar、cglig.jar、jakarta-commons下的几个jar包。<br />
<br />
http://www.springframework.org/download.html下载spring开发包，提供两种zip包<br />
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等常用包。<br />
<br />
4、java.io.FileNotFoundException: Could not open class path resource [....hbm.xml],提示找不到xml文件？<br />
<br />
原因一般有两个：<br />
<br />
(1)该xml文件没有在classpath中。 <br />
<br />
(2)applicationContext-hibernate.xml中的xml名字没有带包名。比如：<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>＜bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"＞<br />
            ＜property <a class="bluekey" href="http://www.yesky.com/key/99/160099.html" target="_blank">name</a>="dataSource"＞＜ref bean="dataSource"/＞＜/property＞<br />
            ＜property name="mappingResources"＞<br />
            ＜list＞<br />
            ＜value＞User.hbm.xml＜/value＞<br />
            错，改为： <br />
            ＜value＞com/yz/spring/<a class="bluekey" href="http://www.yesky.com/key/2963/152963.html" target="_blank">domain</a>/User.hbm.xml＜/value＞<br />
            ＜/list＞<br />
            ＜/property＞<br />
            ＜property name="hibernateProperties"＞<br />
            ＜props＞ <br />
            ＜prop key="hibernate.dialect"＞ net.sf.hibernate.dialect.MySQLDialect ＜/prop＞ <br />
            ＜prop key="hibernate.<a class="bluekey" href="http://www.yesky.com/key/3534/158534.html" target="_blank">show</a>_sql"＞true＜/prop＞ <br />
            ＜/props＞ <br />
            ＜/property＞<br />
            ＜/bean＞</td>
        </tr>
    </tbody>
</table>
<br />
5、org.springframework.beans.NotWritablePropertyException: Invalid property 'postDao' of bean class？<br />
<br />
出现异常的原因是在application-xxx.xml中property name的错误。<br />
<br />
＜property name="...."＞ 中name的名字是与bean的set方法相关的，而且要注意大小写。<br />
<br />
比如<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>public class PostManageImpl extends BaseManage implements PostManage {<br />
            private PostDAO dao = null;<br />
            public void setPostDAO(PostDAO postDAO){<br />
            this.dao = postDAO;<br />
            }<br />
            }</td>
        </tr>
    </tbody>
</table>
<br />
那么xml的定义应该是：<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>＜bean id="postManage" parent="txProxyTemplate"＞<br />
            ＜property name="target"＞<br />
            ＜bean class="com.yz.spring.<a class="bluekey" href="http://www.yesky.com/key/4581/159581.html" target="_blank">service</a>.implement.PostManageImpl"＞<br />
            ＜property name="postDAO"＞＜ref bean="postDAO"/＞＜/property＞ 对<br />
            ＜property name="dao"＞＜ref bean="postDAO"/＞＜/property＞ 错<br />
            ＜/bean＞<br />
            ＜/property＞<br />
            ＜/bean＞</td>
        </tr>
    </tbody>
</table>
<br />
6、Spring中如何实现事务管理？<br />
<br />
首先，如果使用mysql，确定mysql为InnoDB类型。<br />
<br />
事务管理的控制应该放到商业逻辑层。你可以写个处理商业逻辑的JavaBean，在该JavaBean中调用DAO，然后把该Bean的方法纳入spring的事务管理。<br />
<br />
比如：xml文件定义如下：<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>＜bean id="txProxyTemplate" abstract="true"<br />
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"＞<br />
            ＜property name="transactionManager"＞＜ref bean="transactionManager"/＞＜/property＞<br />
            ＜property name="transactionAttributes"＞<br />
            ＜props＞<br />
            ＜prop key="save*"＞PROPAGATION_REQUIRED＜/prop＞<br />
            ＜prop key="remove*"＞PROPAGATION_REQUIRED＜/prop＞<br />
            ＜prop key="*"＞PROPAGATION_REQUIRED＜/prop＞<br />
            ＜/props＞<br />
            ＜/property＞<br />
            ＜/bean＞<br />
            <br />
            ＜bean id="userManage" parent="txProxyTemplate"＞<br />
            ＜property name="target"＞<br />
            ＜bean class="com.yz.spring.service.implement.UserManageImpl"＞<br />
            ＜property name="userDAO"＞＜ref bean="userDAO"/＞＜/property＞<br />
            ＜/bean＞<br />
            ＜/property＞<br />
            ＜/bean＞</td>
        </tr>
    </tbody>
</table>
<br />
com.yz.spring.service.implement.UserManageImpl就是我们的实现商业逻辑的JavaBean。我们通过parent元素声明其事务支持。<br />
<br />
7、如何管理Spring框架下更多的JavaBean？<br />
<br />
JavaBean越多，spring配置文件就越大，这样不易维护。为了使配置清晰，我们可以将JavaBean分类管理，放在不同的配置文件中。 应用启动时将所有的xml同时加载。<br />
<br />
比如：<br />
<br />
DAO层的JavaBean放到applicationContext-hibernate.xml中，商业逻辑层的JavaBean放到
applicationContext-service.xml中。然后启动类中调用以下代码载入所有的ApplicationContext。<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>String[] paths = {"com/yz/spring/dao/hibernate/applicationContext-hibernate.xml",<br />
            "com/yz/spring/service/applicationContext-service.xml"};<br />
            <a class="bluekey" href="http://www.yesky.com/key/2069/152069.html" target="_blank">ctx</a> = new ClassPathXmlApplicationContext(paths);</td>
        </tr>
    </tbody>
</table>
<br />
8、web应用中如何加载ApplicationContext？<br />
<br />
可以通过定义web.xml，由web容器自动加载。<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>＜servlet＞<br />
            ＜servlet-name＞context＜/servlet-name＞<br />
            ＜servlet-class＞org.springframework.web.context.ContextLoaderServlet＜/servlet-class＞<br />
            ＜load-on-startup＞1＜/load-on-startup＞<br />
            ＜/servlet＞<br />
            <br />
            ＜context-param＞<br />
            ＜param-name＞contextConfigLocation＜/param-name＞<br />
            ＜param-value＞/WEB-INF/applicationContext-hibernate.xml＜/param-value＞<br />
            ＜param-value＞/WEB-INF/applicationContext-service.xml＜/param-value＞<br />
            ＜/context-param＞</td>
        </tr>
    </tbody>
</table>
<br />
9、在spring中如何配置的log4j?<br />
<br />
在web.xml中加入以下代码即可。<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>＜context-param＞<br />
            ＜param-name＞log4jConfigLocation＜/param-name＞<br />
            ＜param-value＞/WEB-INF/log4j.properties＜/param-value＞<br />
            ＜/context-param＞</td>
        </tr>
    </tbody>
</table>
<br />
10、Spring框架入门的编程问题解决了，我该如何更深地领会Spring框架呢？<br />
<br />
这两本书你该去看看。这两本书是由Spring的作者Rod Johnson编写的。<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>Expert One on one J2EE Design and Development<br />
            Expert One on one J2EE Development Without EJB</td>
        </tr>
    </tbody>
</table>
<br />
你也该看看martinfowler的Inversion of Control Containers and the Dependency Injection pattern。<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>http://www.martinfowler.com/articles/injection.html</td>
        </tr>
    </tbody>
</table>
<br />
再好好研读一下spring的文档。<br />
<br />
<table align="center" bgcolor="#dadacf" border="1" bordercolor="#ffcc66" width="90%">
    <tbody>
        <tr>
            <td>http://www.jactiongroup.net/reference/html/index.html（中文版，未全部翻译）</td>
        </tr>
    </tbody>
</table>
<br />
还有就是多实践吧。
<img src ="http://www.blogjava.net/worksguo/aggbug/192272.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/worksguo/" target="_blank">worksguo</a> 2008-04-11 20:49 <a href="http://www.blogjava.net/worksguo/articles/192272.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>