2015-07-01 3 views
3

У меня есть это основное приложение весны, в котором значение моего поля @Autowired равно нулю на выходе. Что здесь не так?Весна - что не так с моей Autowiring?

package com.spring; 

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

public class HelloWorld { 
    private String message; 

    @Autowired 
    private Double pi; 

    public HelloWorld(String message){ 
     this.message = message; 
    } 

    public void setMessage(String message){ 
     this.message = message; 
    } 

    public void getMessage(){ 
     System.out.println("Your Message : " + message); 
     System.out.println("autowired: "+pi); 
    } 
} 

файл конфигурации 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" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="pi" name="pi" class="java.lang.Double" autowire="byName"> 
     <constructor-arg value="3.14"/> 
    </bean> 


    <bean id="helloWorld" class="com.spring.HelloWorld"> 
     <constructor-arg ref="msg" /> 
    </bean> 

    <bean id="msg" class="java.lang.String" > 
     <constructor-arg value="Hello World"/> 
    </bean>  

</beans> 

Класс для выполнения APP:

package com.tutorialspoint; 

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

public class MainApp { 
    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); 
     HelloWorld hw = context.getBean(HelloWorld.class); 
     hw.getMessage(); 
     System.out.println(context.getBean("msg")); 



    } 
} 

Выход:

Your Message Hello World 
autowired: null 
Hello World 
+0

попробоватив установка установленный способ и проверка. – KDP

+0

@KDP http://stackoverflow.com/questions/3536674/how-does-spring-autowired-work –

+0

В этом случае должна быть соответствующая аннотация для класса, не так ли? – KDP

ответ

2

Вам нужно добавить <context:annotation-config/> в файл spring.xml, который будет сканировать для пружинных аннотаций в ваших файлов Java. Надеюсь это поможет.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" 
    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.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:annotation-config /> 

    <bean id="pi" name="pi" class="java.lang.Double"> 
     <constructor-arg value="3.14" /> 
    </bean> 
    <bean id="helloWorld" class="com.clsa.test.HelloWorld"> 
     <constructor-arg ref="msg" /> 
    </bean> 
    <bean id="msg" class="java.lang.String"> 
     <constructor-arg value="Hello World" /> 
    </bean> 
</beans> 
+1

В качестве примечания также использовался '', который я пробовал после решения этого ответа. Поэтому он ответил на мой другой вопрос, почему он работал безупречно в моем приложении Spring MVC. – ares

0
you want to define @Quatifier 

@Autowired(required=true) 
@Qualifier("pi") 
Double pi; 
Смежные вопросы