2013-07-28 3 views
0

Я не могу autowire боб и во время работы я получаю выход как:весна - Не могу autowire боб

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

Где вы указали, что бит 'type' должен быть установлен как значение для поля' type' в bean 'prod'? – 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); 
    } 

} 

Это не плохая идея, чтобы иметь сеттер/добытчик для типа, а также, если только для обеспечения согласованности.

0

Если вы новичок в Spring IOC, попробуйте определить конфигурацию bean-компонентов из xml-файла. Это будет легче понять. The IoC container

Смежные вопросы