2014-06-14 113 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

相关问题