gpt4 book ai didi

java - Spring 启动: Autowired error

转载 作者:行者123 更新时间:2023-11-30 06:20:11 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 Spring Boot 应用程序,它将名称作为 URL 中的参数(例如 http://localhost:8080/hello/john )并使用英语或德语问候页面(“Hello John”或“Hallo John”) ”)。

我在 Ubuntu 14.04 下使用 IntelliJ Idea 2017.3.3。

为此,我创建了一个 Spring Intializr 项目和一个名为 GreetingService 的接口(interface):

package com.springboot.configuration.service;

import org.springframework.stereotype.Component;

@Component
public interface GreetingService {
String sayHello(String name);
}

该接口(interface)将在 GrretingServiceEnglish 和 GreetingServiceGerman 两个类中实现,如下所示:

package com.springboot.configuration.service;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("english")
public class GreetingServiceEnglish implements GreetingService{

@Override
public String sayHello(String name) {
return "Hello " + name;
}
}

package com.springboot.configuration.service;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("german")
public class GreetingServiceGerman implements GreetingService{

@Override
public String sayHello(String name) {
return "Hallo " + name;
}
}

要选择必须使用哪一个,application.properties 中有一个条目:

spring.profiles.active="english"

在 Controller 中我进行 Autowiring :

package com.springboot.configuration.controller;

import com.springboot.configuration.service.GreetingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(path = "/", method = RequestMethod.GET)
public class GreetingController {

@Autowired
private GreetingService greetingService;

@RequestMapping(path = "hello/{name}")
public String sayHello(@PathVariable(name = "name") String name){

return greetingService.sayHello(name);
}
}

应用程序是:

package com.springboot.configuration;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProfilesApplication {

public static void main(String[] args) {
SpringApplication.run(ProfilesApplication.class, args);
}
}

当我运行应用程序时出现错误:

com.springboot.configuration.controller.GreetingController 中的字段greetingService 需要一个类型为“com.springboot.configuration.service.GreetingService”的 bean,但无法找到。

怎么了?你能帮我一下吗?

最佳答案

您的 Activity 配置文件设置不正确 - 您没有在 application.properties 文件中引用字符串。在这种情况下,您的 Activity 配置文件实际上是“英语”。如果你用以下方式注释你的组件类就可以了:

@Profile("\"english\"")

您可以在控制台日志中看到它:

2018-01-18 10:43:51.322  INFO 23212 --- [           main] c.s.configuration.ProfilesApplication    : The following profiles are active: "english"

解决方案

只需在 application.properties 中取消引用 spring.profiles.active 即可:

spring.profiles.active=english

它会按照你的预期工作。

2018-01-18 10:47:31.155  INFO 890 --- [           main] c.s.configuration.ProfilesApplication    : The following profiles are active: english

关于 i18n 的一句话

我想这个项目只是一个测试 Spring Boot 功能(如配置文件等)的 Playground 。如果您对国际化应用程序感兴趣,请使用诸如 LocaleChangeInterceptor 之类的东西,它使用 messages_en.properties + messages_de.properties 来定义您的翻译并将其用于单个组件。您可以在这里找到很好的介绍:http://www.baeldung.com/spring-boot-internationalization

关于java - Spring 启动: Autowired error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48317142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com