2013-07-28 126 views
0

我無法自動裝配豆和運行時我得到輸出:春 - 無法自動裝配豆

Jul 28, 2013 1:21:42 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]17aece8: startup date [Sun Jul 28 13:21:42 CDT 2013]; root of context hierarchy 
Jul 28, 2013 1:21:44 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [spring.xml] 
Jul 28, 2013 1:21:50 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
INFO: Pre-instantiating singletons in org.s[email protected]1dc696e: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,prod,type,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy 


Id is: 1 Name is: LED Type is: null 

這裏是我的代碼:

package org.autowire; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.autowire.action1.Type; 

public class Product { 
    private int id; 
    private String name; 

    private Type type; 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
    @Autowired 
    public void setName(String name) { 
     this.name = name; 
    } 


    public void display(){ 
     System.out.println("Id is: "+ id +" Name is: " + name +" Type is: " +type); 
    } 


} 

Type.java

package org.autowire.action1; 

public class Type { 

    private String type; 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 
} 

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

    <!-- Add your classes base package here -->   
    <context:component-scan base-package="org.autowire.Product"/> 

    <bean id="prod" class="org.autowire.Product" > 
     <property name="id" value="1"></property> 
     <property name="name" value="LED"></property> 
    </bean> 


    <bean id="type" class="org.autowire.action1.Type"> 
     <property name="type" value="import"></property> 
    </bean> 



</beans> 

TestApp:

package org.autowire.action1; 

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

public class TestApp { 
    public static void main(String[] args) { 
     ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml"); 
     Product product=(Product)context.getBean("prod"); 
     product.display(); 
    } 

} 

在此先感謝!

+2

在你的spring配置中,你在bean'prod'中的'type'字段的值應該被設置爲bean的type嗎? – reto

回答

1

您需要在類型屬性的@Autowired註解,而不是一個名字:

public class Product { 
    private int id; 
    private String name; 
    @Autowired 
    private Type type; 

    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 

    public void display(){ 
     System.out.println("Id is: "+ id +" Name is: " + name +" Type is: " +type); 
    } 

} 

這不是一個壞主意,有類型制定者/吸氣以及,如果只是爲了一致性。