SpringApplication无法实例化bean

时间:2014-06-14 06:29:40

标签: java spring web-services

我是Spring&的新手WebService并在Spring.io上尝试一些指南。 我计划创建一个基本的RESTful WebService,它使用Google Direction API并返回状态。

以下是课程:

  • 资源

    @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

Spring返回没有为依赖项找到类型[java.lang.String]的限定bean。 消费者中的所有bean都会发生这种情况。

然而,这适用于Configuration 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并且在bean实例化期间失败
  3. 我想了解为什么会出现这个问题以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

原因很简单,没有加载xml配置。看看Spring-Boot: XML Config

如果您不想触摸现有的xml,则需要另一个@configuration注释类和@ImportResource来加载xml配置,就像文档所说的那样。

IMO,您不需要在配置中使用apiKey和url,您应该使用@value对它们进行注释,并在.properties文件中定义它们。还有弹簧启动的默认设置,您可以充分利用它。比如,命名属性application.properities并将其放在classpath上,spring boot会自动加载它。