2012-03-24 9 views
0

を使用して、私は、次の2つのオブジェクトがあります:ユーザーとDomainUser基本的な春号:@Autowired

User.java:

package com.domain; 

import java.io.Serializable; 

@SuppressWarnings("serial") 
public class User implements Serializable { 

    private long id = 0; 
    private String userName; 
    private String password; 

    public User() { 

    } 

    public User(long id) { 
     this.id = id; 
    } 

    public String toString() { 

     StringBuffer sb = new StringBuffer(256); 

     sb.append("[id : ").append(id).append(", "); 
     sb.append("userName : ").append(userName).append(", "); 
     sb.append("password : ").append(password).append("]"); 

     return sb.toString(); 
    } 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

} 

DomainUser.java

package com.domain; 

import org.springframework.beans.factory.annotation.Autowired; 


public class DomainUser { 


    @Autowired 
    private User user; 
    private String domainName; 

    public String toString() { 
     StringBuffer sb = new StringBuffer(255); 

     sb.append(user.toString()).append(", domainName : ").append(domainName); 

     return sb.toString(); 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 

    public String getDomainName() { 
     return domainName; 
    } 

    public void setDomainName(String domainName) { 
     this.domainName = domainName; 
    } 



} 

を私はautowireしようとしています@Autowired注釈を使用してDomainUserにUserオブジェクトを挿入します。しかし、以下のようにテストを実行すると、Userオブジェクトに値が設定されません。

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" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="user" class="com.domain.User"> 
     <constructor-arg value="#{1234}"/> 
     <property name="userName" value="somename" /> 
     <property name="password" value="sompassword" /> 
    </bean> 

    <bean id="domainUser" class="com.domain.DomainUser"> 
     <property name="domainName" value="mysite" /> 
    </bean> 

</beans> 

DomainUserTest.java

package com.domain.test; 

import org.springframework.context.support.ClassPathXmlApplicationContext; 

import com.domain.DomainUser; 

public class DomainUserTest { 

    public static void main(String[] args) { 

     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
       "applicationContext.xml"); 

     DomainUser domainUser = (DomainUser) context.getBean("domainUser"); 

     System.out.println(domainUser.toString()); 
    } 

} 

私はapplicationContext.xmlを中にオートワイヤリング属性の 'byType' を使用してautowire場合は、それが正常に動作します:

<bean id="domainUser" class="com.domain.DomainUser" autowire="byType"> 
     <property name="domainName" value="mysite" /> 
    </bean> 

なぜか@Autowiredアノテーションが同じものを生成する理由を理解できますか?結果?

答えて

4

@Autowiredプロパティの注入を処理するには、AutowiredAnnotationBeanPostProcessorが必要です。あなたは<context:annotation-config />を配置(あなたはXMLでコンテキスト -namespaceを定義する必要があります)、またはちょうどあなたのXMLでBeanとしてポストプロセッサを定義することができます。

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 

は、詳細については、たとえばhereを参照してください。