2014-06-14 155 views
0

我是Spring & WebService的新手,並試用Spring.io上的一些指南。 我計劃創建一個基本的RESTful WebService,它使用Google Direction API並返回狀態。SpringApplication無法實例化bean

下面是類:

  • 資源

    @JsonIgnoreProperties(ignoreUnknown=true) 
    public class Direction { 
    
        // getters & setters 
    
        public Direction() { 
         super(); 
        } 
    
        private String status; 
    
        public String toString() { 
        return status; 
        } 
    } 
    
  • 控制器

    @Controller 
    public class Consumer { 
    
        public Consumer() { 
          super(); 
        } 
    
        @Resource 
        private String url; 
        @Resource 
        private RestTemplate client; 
        @Resource 
        private String apiKey; 
    
        @RequestMapping(value = "/directions", method=RequestMethod.GET) 
        public @ResponseBody Direction consume(@RequestParam(value="source") String source, @RequestParam(value="destination") String destination) { 
    
        return consumeDirections(buildURI(source, destination)); 
        } 
    
         // Builds URI 
        private String buildURI(...) { 
         ... 
        } 
    
        private Direction consumeDirections(final String requestURI) { 
         return client.getForObject(requestURI, Direction.class); 
        } 
        } 
    
  • 配置V1

    @Configuration 
    @ComponentScan 
    @EnableAutoConfiguration 
    public class Application { 
    
        public static void main(String[] args) { 
         SpringApplication.run(Consumer.class, args); 
        } 
    } 
    
  • Springconfig http://pastebin.com/dsNVBWQq

春返回[java.lang.String中]發現無依賴型的排位豆。 這發生在Consumer的所有bean中。

然而,這一工程配置V2

@Configuration 
@ComponentScan 
@EnableAutoConfiguration 
public class Application { 
    @Resource 
    private Consumer consumer; 

    public void execute() { 
     System.out.println(consumer.consume("x", "z")); 
    } 

    public static void main(String[] args) { 
     ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("application-config.xml"); 
    context.getBean(Application.class).execute(); 
    } 
} 

一些觀察

  1. @Resouce(明確定義的bean)爲V1不工作
  2. SpringApplication沒有意識到Springconfig和豆過程中失敗實例化

我想簡寫以及爲什麼這個問題突然出現以及如何解決它?

+0

你在哪裏定義了'apiKey'和'url'在v1 – Jaiwo99

+0

@ Jaiwo99:它在Spring-config中。這兩個版本我都沒有碰過Spring配置。 – Mohitk

回答

0

原因很簡單,xml配置沒有加載。看看Spring-Boot: XML Config

如果您不想觸摸現有的xml,您需要另一個@configuration註釋類和@ImportResource來加載xml配置,就像文檔所說的那樣。

IMO,你不需要配置中的apiKey和url,你應該用@value註釋它們,並在.properties文件中定義它們。還有彈簧引導的默認設置,您可以充分利用它。比如,將特性命名爲application.properities並將其放在類路徑中,spring boot會自動加載它。

+0

謝謝。 我明白Spring配置沒有被讀取,但正在尋找加載它的方法。這正是需要的。 – Mohitk

相關問題