spring注入bean的,启动服务器加载完配置文件 bean为null
applcationContext.xml:
<bean id="CommentAction" class="com.flex.blog.action.CommentAction">
<property name="commentServiceAS" ref="CommentServiceAS" />
</bean>
====================
java:
public class ConsumerAction extends ActionSupport {
private ConsumerServiceAS consumerServiceAS; public void setConsumerServiceAS(ConsumerServiceAS consumerServiceAS) {
this.consumerServiceAS = consumerServiceAS;
} public ConsumerServiceAS getConsumerServiceAS() {
return consumerServiceAS;
}
===================
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
   <listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
问题:启动服务器没任何异常,为什么现在consumerServiceAS还是null呢

解决方案 »

  1.   

    LZ配置信息不全,从异常结果来看,consumerServiceAS没有交给spring
      

  2.   

    配置文件里的property name 与你Action里面注入的保持一致。
      

  3.   

    <bean id="CommentServiceAS" class="com.flex.blog.XXX">
    </bean>你在注入时至少要有这个吧,否则怎么引用的呢?
      

  4.   

    5楼回答的正确 你注入的CommentServiceAS 至少要有个<bean id = CommentServiceAS> 的吧 不然 注入 肯定为null  可能是你service层 没有写注入的配置文件吧
      

  5.   

    你的applcationContext.xml: property  name是错误的  必须和你java类中定义的一样
      

  6.   

    不好意思 spring全部配置文件 在这里
    applcationContext.xml:
    <bean id="CommentAction" class="com.flex.blog.action.CommentAction">
      <property name="commentServiceAS" ref="CommentServiceAS" />
    </bean>
    <bean id="CommentServiceAS" class="com.flex.blog.servive.impl.CommentServiceASImpl">
      <property name="commentDaoAS" ref="CommentDaoAS" />
    </bean>
    <bean id="CommentDaoAS" class="com.flex.blog.dao.impl.CommentDaoASImpl">
      <property name="commentDaoAS" ref="hibernateTemplate" />
    </bean>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate.HibernateTemplate"> 
       <property name="sessionFactory" ref="sessionFactory"/>
    </bean> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="mappingDirectoryLocations">

       <value>classpath:hibernate.cfg.xml</value>

    </property>
    </bean>
      

  7.   

    java类里都有相应的成员属性和bean里配置的property  name大小写都一致 而且有set方法
      

  8.   

    楼主是使用了struts2吗?
    如果是使用了struts2在strutx.xml中的类名要是CommentAction。
      

  9.   

    根据楼主的配置,发现可能出现如下问题:
    applcationContext.xml:
    <bean id="CommentAction" class="com.flex.blog.action.CommentAction">
    <property name="commentServiceAS" ref="CommentServiceAS" />
    </bean><!--此处ref=“CommentServiceAS”说明你必须在applicationContext.xml再定义另外一个bean,叫CommentServiceAS--!>
      

  10.   

    我用的是struts2 action对应的类是com.flex.blog.action.CommentAction呢
      

  11.   


    红线部分的配置是什么意思:<bean id="CommentDaoAS" class="com.flex.blog.dao.impl.CommentDaoASImpl">
      <property name="commentDaoAS" ref="hibernateTemplate" /></bean>
    楼主是不是搞错了
      

  12.   


    <property name="commentServiceAS" ref="CommentServiceAS" />
    //你的name=commentServiceAS,这样,它就会去找它对应的set方法,所以你的Action里面要有这个set方法,让你保持name一样也就是这个意思,当然,不一样也可以,但是只要确保有它的set方法之后你就可以取其它的名字。
      

  13.   

    不好意识 贴的时间大意了,配置是这样
    <bean id="CommentDaoAS" class="com.flex.blog.dao.impl.CommentDaoASImpl">
      <property name="hibernateTemplate" ref="hibernateTemplate" />
    </bean>
      

  14.   

    action里有对应的属性,且也有set方法
      

  15.   

    我是说楼主使用struts2配置的时候
    <action name='' class="">
    </actio>
    这的class是怎么配置的,值是不是CommentAction,还是你直接使用的包名+类名的形式?
      

  16.   

    public class ConsumerAction extends ActionSupport {
    private ConsumerServiceAS consumerServiceAS;public void setConsumerServiceAS(ConsumerServiceAS consumerServiceAS) {
    this.consumerServiceAS = consumerServiceAS;
    }
    <bean id="CommentAction" class="com.flex.blog.action.CommentAction">
      <property name="commentServiceAS" ref="CommentServiceAS" />
    </bean>
    lz啊你action里的属性有commenServiceAs吗,我没找到,只看到你action里有个属性是consumerServiceAS,这里的property 应该是你action里的属性名字,你的consumerServiceAS不为空就见鬼了
      

  17.   

    <bean id="CommentAction" class="com.flex.blog.action.CommentAction">
    <property name="commentServiceAS" ref="CommentServiceAS" />
    </bean>spring 中的property name=commentServiceAS
    而action 中的名字为:consumerServiceAS
    名字很明显没正确关联 如果你不改action类里面的名字consumerServiceAS,你也可以把set和get的方法名改为getCommentServiceAS() setCommentServiceAS()也可以
      

  18.   

    ls上的,改下set和get方法就能注入action里的属性了,你写再多的set get方法action的属性不配置在spring里,spring怎么给你注入,误导吧,对了get方法对注入是没作用的
      

  19.   

    <bean id="CommentAction" class="com.flex.blog.action.CommentAction">
    <property name="commentServiceAS" ref="CommentServiceAS" />
    </bean>
     中的commentServiceAS 在你的Action中并未对应上!
      

  20.   

    不好意识 两个类的名字有点相似 搞混了 但是 action有service的属性和set方法的 这个是没错的
      

  21.   

    我说你的action里的属性和配置没关联,你说你有属性没贴出来,那lz就把代码和配置文件贴出来,让大家帮你看看究竟是啥在作怪
      

  22.   

    applcationContext.xmlclasspath:applicationContext.xml配置文件名不一样
      

  23.   

    没有调用proceed方法吧?