0

私はSpringを始めたばかりで、自動配線を試みています byName ここに私のコードがあります

住所クラス:

package org.springinaction;

public class Address {
    private String addressline;

    public String getAddressline() {
        return addressline;
    }

    public void setAddressline(String addressline) {
        this.addressline = addressline;
    }

}

顧客クラス:

package org.springinaction;

public class Customer {
    private Address address;
    public Address getN() {
        return address;
    }

    public void setN(Address n) {
        this.address = n;
    }
}

春の構成:

<beans>
  <bean id="customer" class="org.springinaction.Customer" autowire="byName" />

  <bean id="address" class="org.springinaction.Address">
    <property name="addressline" value="bangalore" />
  </bean>
</beans>

CustomerTest.java

package org.springinaction;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class CustomerTest {
    public static void main(String[] args) {
        ApplicationContext context =new ClassPathXmlApplicationContext("SpringInAction.xml");
        Customer cust=(Customer)context.getBean("customer");
        System.out.println(cust.getN());
    }
}

プロパティの名前が名前の名前と一致する場合、autowired が取得されますが、私の場合は発生しません。これでnullを与えてくれます...正しく自動配線されるように、これを誰か助けてもらえますか

4

3 に答える 3

2

自動配線が検索する「名前」は、setterメソッドの名前から派生したJavaBeanプロパティの名前です。したがって、CustomerクラスにはnsetNメソッドから)という名前のプロパティがあり、プライベートフィールドに名前が付けられているという事実addressは関係ありません。 。

既存のBeanの名前と一致させるには、 idを使用して適切なBeanを定義するかn、Customerのgetterとsetterをandに変更getAddressする必要があります。setAddressaddress

于 2013-01-26T20:23:28.440 に答える
0

Customer Bean に Address Bean を注入するだけの場合は、@Autowired アノテーションを使用するだけで、セッター/ゲッターは必要ありません。

<context:annotation-config /> // EDIT - think this required for autowiring

<bean id="customer" class="org.springinaction.Customer"/>

<bean id="address" class="org.springinaction.Address">
    <property name="addressline" value="bangalore" />
</bean>

public class Customer {
    @Autowired
    Address address;
....

複数のアドレス Bean がありますか? 次に @Qualifier も使用します。

<bean id="customer" class="org.springinaction.Customer"/>

<bean id="work-address" class="org.springinaction.Address">
    <property name="addressline" value="bangalore" />
</bean>

<bean id="home-address" class="org.springinaction.Address">
    <property name="addressline" value="bangalore" />
</bean>

public class Customer {
    @Autowired
    @Qualifier ( value = "work-address" )
    Address workAddress;

    @Autowired
    @Qualifier ( value = "home-address" )
    Address homeAddress;
....
于 2013-01-28T16:30:08.140 に答える