今天做了个spring练习,发现如下问题:
spring从beans.xml文件中读取实例,对类实例化时,需要用到该类的构造函数初始化该类,但是spring貌似对有参构造函数不感兴趣,仅对无参构造函数有用,
// public GreetInterImpl(){
//
// }

public GreetInterImpl(String greetString) {
super();
this.greetString = greetString;
}将上面那个无参构造函数注释掉的话,会报Error creating bean with name 'greetInter' defined
原因是GreetInterImpl类 No default constructor found  没有构造函数我想问的是,为什么下面那个构造函数,spring就不识别呢。

解决方案 »

  1.   

    因为你是用SETER注入方式只读无参构造函数,用构造器注入方式才可识别
      

  2.   

    构造器注入 怎么整  .xml文件怎么配置
     
      

  3.   

    public void setGreetString(String greetString) {
    this.greetString = greetString;
    }

    public GreetInterImpl(String greetString) {

    this.greetString = greetString;
    }这两个方法不是 setter和构造函数注入方式么 ,我两个方法都有啊
      

  4.   

    知道了,是我在.xml文件中没有对构造器注入方式做配置。
    简单的说
    就是需要
    <constructor-tag>
    </constructor-tag>标签,对吧。
      

  5.   

    <bean id="xx" class="service.Actor">
    <constructor-arg  name="" value="">
    <constructor-arg name="" value="">
    </bean>
      

  6.   

    你自己解决问题的能力就很强嘛!!
    不过建议你,还是用getter,setter方法来注入
      

  7.   

    那能说说setter和构造器注入 的区别吗