ssh的spring 无法注入怎么回事

UserInfoDAOImpl.java

@Service
public class UserInfoDAOImpl extends HibernateDaoSupport implements UserInfoDAO {
public boolean login(Userinfo userinfo) {
    boolean isExist = false;
    Userinfo temp = (Userinfo)this.getHibernateTemplate().find("from Userinfo u where u.username=?", userinfo.getUsername()).get(0);
    try {
        if(userinfo.getPassword().equals(temp.getPassword())) 
            isExist = true;
    } catch(Exception e) {
        e.printStackTrace();
    }
    System.out.println("id:" + temp.getId());
    System.out.println("username:" + temp.getUsername());
    System.out.println("password:" + temp.getPassword());
    System.out.println("isExist:" + isExist);
    return isExist;
}

}


LoginAction.java
@Component
@Results(value={
@Result(name="success", location="/login_success.jsp"),
@Result(name="fail", location="/Login.jsp")
})
public class LoginAction extends ActionSupport {
private Userinfo userinfo;

@Autowired
private UserInfoDAO userInfoDAOImpl;

public Userinfo getUserinfo() {
    return userinfo;
}

public void setUserinfo(Userinfo userinfo) {
    this.userinfo = userinfo;
}

public UserInfoDAO getUserInfoDAOImpl() {
    return userInfoDAOImpl;
}

public void setUserInfoDAOImpl(UserInfoDAO userInfoDAOImpl) {
    System.out.println("注入");
    this.userInfoDAOImpl = userInfoDAOImpl;
}

@Action("login")
public String login() {
    System.out.println("id:" + userinfo.getId());
    System.out.println("username:" + userinfo.getUsername());
    System.out.println("password:" + userinfo.getPassword());
    if(userInfoDAOImpl == null)
        System.out.println("error");
    if(userinfo == null)
        return "fail";
    else 
        return (userInfoDAOImpl.login(userinfo))?"success":"fail";
}

}


applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-lazy-init="true">
&lt;bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"&gt;
    &lt;property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /&gt;
    &lt;property name="ignoreResourceNotFound" value="true" /&gt;
    &lt;property name="locations"&gt;
        &lt;list&gt;
            &lt;value&gt;classpath:application.properties&lt;/value&gt;
        &lt;/list&gt;
    &lt;/property&gt;
&lt;/bean&gt;

&lt;context:component-scan base-package="org.sales.dao.Impl" /&gt;


&lt;!-- 数据源配置,使用应用内的DBCP数据库连接池 --&gt;
&lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"&gt;
    &lt;!-- Connection Info --&gt;
    &lt;property name="driverClassName" value="${jdbc.driverClassName}" /&gt;
    &lt;property name="url" value="${jdbc.url}" /&gt;
    &lt;property name="username" value="${jdbc.username}" /&gt;
    &lt;property name="password" value="${jdbc.password}" /&gt;

&lt;/bean&gt;

&lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;
    &lt;property name="dataSource" ref="dataSource" /&gt;
    &lt;property name="namingStrategy"&gt;
        &lt;bean class="org.hibernate.cfg.ImprovedNamingStrategy" /&gt;
    &lt;/property&gt;
    &lt;property name="hibernateProperties"&gt;
        &lt;props&gt;
            &lt;prop key="hibernate.dialect"&gt;${hibernate.dialect}&lt;/prop&gt;
            &lt;prop key="hibernate.show_sql"&gt;${hibernate.show_sql}&lt;/prop&gt;
            &lt;prop key="hibernate.format_sql"&gt;${hibernate.format_sql}&lt;/prop&gt;
            &lt;prop key="hibernate.cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider&lt;/prop&gt;

<!-- <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>-->

        &lt;/props&gt;
    &lt;/property&gt;

    &lt;property name="packagesToScan" value="org.sales.entity" /&gt;
    &lt;property name="annotatedClasses"&gt;
        &lt;list&gt;
            &lt;value&gt;org.sales.entity.Iteminfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Cardinfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Positioninfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Sellinfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Userinfo&lt;/value&gt;
            &lt;value&gt;org.sales.entity.Voteinfo&lt;/value&gt;&lt;/list&gt;
    &lt;/property&gt;&lt;/bean&gt;

&lt;bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate" &gt;
    &lt;property name="sessionFactory" ref="sessionFactory"/&gt;
&lt;/bean&gt;

&lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;
    &lt;property name="sessionFactory" ref="sessionFactory" /&gt;
&lt;/bean&gt;

&lt;tx:annotation-driven transaction-manager="transactionManager" /&gt;

&lt;bean id="CardinfoDAO" class="org.sales.entity.CardinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="IteminfoDAO" class="org.sales.entity.IteminfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="PositioninfoDAO"
    class="org.sales.entity.PositioninfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="SellinfoDAO" class="org.sales.entity.SellinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="UserinfoDAO" class="org.sales.entity.UserinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="VoteinfoDAO" class="org.sales.entity.VoteinfoDAO"&gt;
    &lt;property name="sessionFactory"&gt;
        &lt;ref bean="sessionFactory" /&gt;
    &lt;/property&gt;
&lt;/bean&gt;

</beans>


web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
&lt;context-param&gt;
    &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
    &lt;param-value&gt;classpath*:applicationContext.xml&lt;/param-value&gt;
&lt;/context-param&gt;

&lt;filter&gt;
    &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.springframework.orm.hibernate3.support.OpenSessionInViewFilter&lt;/filter-class&gt;
    &lt;init-param&gt;      
      &lt;param-name&gt;singleSession&lt;/param-name&gt;      
      &lt;param-value&gt;true&lt;/param-value&gt;      
    &lt;/init-param&gt;
&lt;/filter&gt;

&lt;listener&gt;
    &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;
&lt;/listener&gt;

&lt;filter&gt;
    &lt;filter-name&gt;struts2Filter&lt;/filter-name&gt;
    &lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt;
&lt;/filter&gt;

&lt;filter-mapping&gt;
    &lt;filter-name&gt;struts2Filter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;

&lt;filter-mapping&gt;
    &lt;filter-name&gt;OpenSessionInViewFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;

&lt;welcome-file-list&gt;
    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
&lt;/welcome-file-list&gt;

</web-app>



结果在LoginAction.java里面输出:
id:null
username:username
password:USERNAME
error
说明: error是当被注入的属性为空的时候输出.
求解~

异常(网页上的):
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException
org.sales.actions.LoginAction.login(LoginAction.java:53)
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:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
问题补充
xixix2004 写道
有异常吗。

敢不敢把异常发出来看一下。

发了
问题补充
xixix2004 写道
好吧,应该不需要异常,请把ACTION里定义的DAO的变量名,变得和xml里定义的BEAN ID属性一致。

xml里面没有对应的bean,因为使用注释
问题补充
yyf365 写道
可能和楼主的应用写法不太相同,请问你其他的service是否能注入成功呢?,不过是否能试试在applicationContext配置文件中的声明方式换一种呢?

如:
<bean id="UserInfoDAO"
class="UserInfoDAOImp">
</bean>
这种形式注入,实例化由spring托管,而在action中只对UserInfoDAO的service进行注入呢

而如果出了该service无法注入外,其他其余的service都能正常注入使用,那就另想办法了

可是这种方法有点麻烦,我想实现注释注入,xml文件里面有个扫描的:
<context:component-scan base-package="org.sales.dao.Impl" /> 
问题补充
已经试过在 applicationContext.xml 文件里面添加
<bean id="userInfoDAOImpl" class="org.sales.dao.Impl.UserInfoDAOImpl">
</bean>
<bean id="loginAction" class="org.sales.actions.LoginAction">
<property name="userInfoDAOImpl">
<ref bean="userInfoDAOImpl" />
</property>
</bean>


异常信息一样.
问题补充
xixix2004 写道
bbinglongg 写道
xixix2004 写道
好吧,应该不需要异常,请把ACTION里定义的DAO的变量名,变得和xml里定义的BEAN ID属性一致。

xml里面没有对应的bean,因为使用注释



你完全没看懂我在说什么。

private UserInfoDAO userinfoDAO; 


<bean id="userinfoDAO" class="org.sales.entity.UserinfoDAO">

<property name="sessionFactory">

<ref bean="sessionFactory" />

</property>

</bean>






在它上面有一句:
@Autowired

是自动注入的意思
问题补充
xixix2004 写道
<ref bean="UserInfoDAO" />这里的REF的BEAN, 写你之前定义的BEAN的ID。你可明白?

明白
问题补充
dwbin 写道
loginAction没有进行spring托管。
这个类spring不会自己进行注入的。你的ssh整合有问题


那我应该怎么修改呢?
问题补充
dwbin 写道
loginAction没有进行spring托管。
这个类spring不会自己进行注入的。你的ssh整合有问题

@Autowired
这个标签里面已经是注入了

10个回答

会不会是struts2-spring插件包没有加进来?

有异常吗。

敢不敢把异常发出来看一下。

好吧,应该不需要异常,请把ACTION里定义的DAO的变量名,变得和xml里定义的BEAN ID属性一致。

可能和楼主的应用写法不太相同,请问你其他的service是否能注入成功呢?,不过是否能试试在applicationContext配置文件中的声明方式换一种呢?

如:
class="UserInfoDAOImp">

这种形式注入,实例化由spring托管,而在action中只对UserInfoDAO的service进行注入呢

而如果出了该service无法注入外,其他其余的service都能正常注入使用,那就另想办法了

[quote="bbinglongg"][quote="xixix2004"]好吧,应该不需要异常,请把ACTION里定义的DAO的变量名,变得和xml里定义的BEAN ID属性一致。[/quote]
xml里面没有对应的bean,因为使用注释[/quote]

你完全没看懂我在说什么。

[code="java"]private UserInfoDAO userinfoDAO; [/code]
[code="java"]










[/code]

[quote="bbinglongg"]已经试过在 [b]applicationContext.xml[/b] 文件里面添加
[code="xml"]





[/code]

异常信息一样.[/quote]

[code="java"]














[/code]

这里的REF的BEAN, 写你之前定义的BEAN的ID。你可明白?

loginAction没有进行spring托管。
这个类spring不会自己进行注入的。你的ssh整合有问题

[quote="bbinglongg"][quote="dwbin"]loginAction没有进行spring托管。
这个类spring不会自己进行注入的。你的ssh整合有问题[/quote]
在 [code="java"]@Autowired[/code] 这个标签里面已经是注入了[/quote]
你这个不是进行spring托管,该类的实例还是由struts2进行维护的,所以spring没法注入。
我没有做过struts2和spring进行整合,但是我觉得应该有一个由spring提供的进行整合的类,这个类需要被配置在web.xml里面而不是struts的类。
或者有一个struts提供的自动为spring提供注入的接口和实现。
你这个注解是spring的,struts是无法使用的

你的 @Autowired是不是要写在set方法上面啊。。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问