Spring常见问题

来源:互联网 发布:在hbuilder运行js脚本 编辑:程序博客网 时间:2024/06/05 18:24

1、利用Spring框架编程,console打印出log4j:WARN Please initialize the log4j system properly?LUPA开源社区)U I]W.D/T
说 明你的log4j.properties没有配置。请把log4j.properties放到工程的classpath中,eclipse的 classpath为bin目录,由于编译后src目录下的文件会拷贝到bin目录下,所以你可以把log4j.properties放到src目录下。
*/ Ah%l-w S ECU0这里给出一个log4j.properties的例子:
d||n7r0Ch2B0
In~Rx7@.E)w0log4j.rootLogger=DEBUG,stdoutLUPA开源社区'a|^{6s
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
!j1VrOQ7E0log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
c^mF)F;Df0log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
6X4r)E5A7~&B4/0LUPA开源社区-K Q'k%G[ l

+U[j&j%s3@02、出现 java.lang.NoClassDefFoundError?LUPA开源社区7Dh2J;`)h+mw
一般情况下是由于你没有把必要的jar包放到lib中。LUPA开源社区)KsK)Q)T
LUPA开源社区Ao^4b-HGW[9CU
比如你要采用spring和hibernate(带事务支持的话),你除了spring.jar外还需要hibernat.jar、aopalliance.jar、cglig.jar、jakarta-commons下的几个jar包。LUPA开源社区_[{w%FHM+xBh
LUPA开源社区+o"S|ap/G
http://www.springframework.org/download.html下载spring开发包,提供两种zip包
po'R4]_ sfT3Tj0spring -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等常用包。LUPA开源社区$ybw-N3JYQ6_/HBZh

T�r'QY(Uy0LUPA开源社区CeOv6z9q�hE
3、java.io.FileNotFoundException: Could not open class path resource [....hbm.xml],提示找不到xml文件?
E}'kuix0原因一般有两个:
0?E]ddK;j3IyJ0(1)该xml文件没有在classpath中。
M#nhP;?"ZoR-[-q0(2)applicationContext-hibernate.xml中的xml名字没有带包名。比如:
2K9?]8I([MDDQg0<bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
p}P0ls9K0        <property name="dataSource"><ref bean="dataSource"/></property>
"j�hF+`2uV.s&Uw!K0        <property name="mappingResources">LUPA开源社区&g/R u�L _ m
            <list>LUPA开源社区nk u&@ y m
                <value>User.hbm.xml</value>         错,改为: <value>com/yz/spring/domain/User.hbm.xml</value>
)W1^jq,{O)A yk�~0            </list>LUPA开源社区5H uY$yZ
        </property>LUPA开源社区3D7Si*w&|X8_
        <property name="hibernateProperties">
5o)r.e w/4/;tL~,D0         <props> LUPA开源社区2I!Ts7cm
         <prop key="hibernate.dialect"> net.sf.hibernate.dialect.MySQLDialect </prop> LUPA开源社区g#V [l$i|m
         <prop key="hibernate.show_sql">true</prop>
$qQ+{4]3Wuba0        </props>
4I�s f�_%Mu o t0        </property>
D6OrQ)u7C0</bean>
1C[6{Ex3]0
#Y`:~[2w`%{-X0LUPA开源社区i-sw$rgq
4、org.springframework.beans.NotWritablePropertyException: Invalid property 'postDao' of bean class?
ie.p4]*}Q$ZG+G0出现异常的原因是在application-xxx.xml中property name的错误。
&a:m$?$i]N+d0R!X1Z0<property name="...."> 中name的名字是与bean的set方法相关的,而且要注意大小写。
s%/s,i^b0比如LUPA开源社区_mI;e{5a5}-_(`
public class PostManageImpl extends BaseManage implements PostManage {
Y"g3Y@ m-?G{+m3E]0    private PostDAO dao = null;LUPA开源社区@;Z6m+Wsw
    public void setPostDAO(PostDAO postDAO){
vxa5aJ0        this.dao = postDAO;LUPA开源社区-K!Lg ]so
    }LUPA开源社区dk(])U,alU
}
,S'P{^j0那么xml的定义应该是:LUPA开源社区tF*@'?'?O
<bean id="postManage" parent="txProxyTemplate">
]�l�Pc-mJf/W K(r0        <property name="target">LUPA开源社区G O(jMwn^a^
            <bean class="com.yz.spring.service.implement.PostManageImpl">LUPA开源社区N9i4jt-W
                <property name="postDAO"><ref bean="postDAO"/></property>    对LUPA开源社区T,EDD7I/t&I4K!]
                <property name="dao"><ref bean="postDAO"/></property>             错LUPA开源社区'kC2XJcz
            </bean>
7P1o./5~$X2O ]0        </property>LUPA开源社区kD&p0A0nZ+ki
</bean>LUPA开源社区G5E^D;k3| FGq.z%M
LUPA开源社区 NNAR7k9g1zs8N
LUPA开源社区4F ~{ M%y6Z
5、Spring中如何实现事务管理?
?"`%~*I ]~0        首先,如果使用mysql,确定mysql为InnoDB类型。LUPA开源社区D@Q1Li0h rE'H;Uc g
        事务管理的控制应该放到商业逻辑层。你可以写个处理商业逻辑的JavaBean,在该JavaBean中调用DAO,然后把该Bean的方法纳入spring的事务管理。LUPA开源社区2yQJ%OiQ%ct-c4oZ

?1Y,q9[[V3u$dz�N4m0比如:xml文件定义如下:
*c5E8Q9k1h*t#@"G0<bean id="txProxyTemplate" abstract="true"
shy:Oj;Q]0        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
;Ot};yll2G0        <property name="transactionManager"><ref bean="transactionManager"/></property>LUPA开源社区&b9]&Ce;A3L(UC
        <property name="transactionAttributes">
$D.z G'l1bg;JX0            <props>
o,J9a&K.r#H�u0                <prop key="save*">PROPAGATION_REQUIRED</prop>
(Nj q7Ca0                <prop key="remove*">PROPAGATION_REQUIRED</prop>
:xG-Y6jT/m ]#u0                <prop key="*">PROPAGATION_REQUIRED</prop>
1e1qQNFP0            </props>
5i2BI;e2v#{Ve0n?&U;[0        </property>LUPA开源社区-t*p m�?Bc"aD`)S
</bean>LUPA开源社区#xMAY V(J
LUPA开源社区 Zl v"r{'_!@
<bean id="userManage" parent="txProxyTemplate">
4M:_NZ7Jz;H4f0      <property name="target">
f$F8o1e:j0          <bean class="com.yz.spring.service.implement.UserManageImpl">LUPA开源社区Ov,/$_:](_VzN(M!]
              <property name="userDAO"><ref bean="userDAO"/></property>LUPA开源社区f0Lu&pZ5Z
          </bean>LUPA开源社区6{'k^cM7P;w!q7Vb*r
      </property>LUPA开源社区c)B5|-u_ ZB
</bean>
f!|-u b6I+]zD[:j0
xOXb/*o?)u0com.yz.spring.service.implement.UserManageImpl就是我们的实现商业逻辑的JavaBean。我们通过parent元素?/span>

6、如何管理Spring框架下更多的JavaBean?
.Tw-x mV0
0pn.c.Cx`0  JavaBean越多,spring配置文件就越大,这样不易维护。为了使配置清晰,我们可以将JavaBean分类管理,放在不同的配置文件中。 应用启动时将所有的xml同时加载。
a h,Cm3~{P0LUPA开源社区s;P*nTQ.cY] H _
  比如:LUPA开源社区`5t#zfc6d#L"@;Y
LUPA开源社区,NU^!o(@ Kz$OQNF
   DAO层的JavaBean放到applicationContext-hibernate.xml中,商业逻辑层的JavaBean放到 applicationContext-service.xml中。然后启动类中调用以下代码载入所有的ApplicationContext。
v!J9P2x$n0
(B:eI;K6kpg@!L0String[] paths = {"com/yz/spring/dao/hibernate/applicationContext-hibernate.xml",LUPA开源社区g+]3WG_Y a2~%l
"com/yz/spring/service/applicationContext-service.xml"};LUPA开源社区2uT%q4Gt8u a7xn
ctx = new ClassPathXmlApplicationContext(paths);
mg9l'yE[]5J:|A0[$b0
(D"N,b%Vw ^#DL(Q2j&m0  7、web应用中如何加载ApplicationContext?
[RY-P%Wp["K0
lL6KV9k&I(Ubl4hGm0  可以通过定义web.xml,由web容器自动加载。LUPA开源社区 iva-u!}O

3PixM0^6s0<servlet>
JCfz)E"`�@"S$J0<servlet-name>context</servlet-name>LUPA开源社区 Bw5Cpx s4]'Pt
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>LUPA开源社区Eq-hRq}6?2t7M1L�Q [
<load-on-startup>1</load-on-startup>LUPA开源社区!_#?z5l{Ic
</servlet>
1Z Ao({ j8W0LUPA开源社区6G)p@;M:[z.E
<context-param>LUPA开源社区zT-~*{,P8S]^
<param-name>contextConfigLocation</param-name>LUPA开源社区S/](r3H,sGi
<param-value>/WEB-INF/applicationContext-hibernate.xml</param-value>
+V5^+/ G5?0<param-value>/WEB-INF/applicationContext-service.xml</param-value>LUPA开源社区+W,|ZG n_
</context-param>
-w7y6S#ju1/ c {0LUPA开源社区#u;i*S%h%hH*W
  8、在spring中如何配置的log4j?LUPA开源社区f/hF'I'Y*J
LUPA开源社区E9N }vg9e
  在web.xml中加入以下代码即可。
9L%V7i,SE0LUPA开源社区Q$? P4rQ k"s
<context-param>
Dcb'u1pYT d0<param-name>log4jConfigLocation</param-name>LUPA开源社区q#I#I5B9p1G(TRfp;v
<param-value>/WEB-INF/log4j.properties</param-value>
;i5VE"N/VD0</context-param>