Java 使用注入的Spring引导DI。未识别的类别

Java 使用注入的Spring引导DI。未识别的类别,java,spring-boot,dependency-injection,Java,Spring Boot,Dependency Injection,我正在尝试运行Spring启动应用程序。我当然想使用DI,我正在探索javax.injectannotations包。然而,关于它的文件非常稀少。这是迄今为止我所拥有的一个非常简单的设置 @RestController public class HelloController { @Inject private IGreetingService greetingService; @RequestMapping("/") public String index(

我正在尝试运行Spring启动应用程序。我当然想使用DI,我正在探索
javax.inject
annotations包。然而,关于它的文件非常稀少。这是迄今为止我所拥有的一个非常简单的设置

@RestController
public class HelloController {

    @Inject
    private IGreetingService greetingService;

    @RequestMapping("/")
    public String index() {

        return greetingService.greet();
    }
}

public class GreetingService implements IGreetingService {

    @Override
    public String greet(){
        DummyObject dummyObject = new DummyObject("valueOne", 10);
        ObjectMapper mapper = new ObjectMapper();

        String dummyObjectJson = "";
        try{
            dummyObjectJson = mapper.writeValueAsString(dummyObject);
        }catch(IOException e){}

        return dummyObjectJson;
    }
}
我得到以下错误:

Field greetingService in com.accenture.greetings.HelloController required a bean of type 'com.accenture.interfaces.IGreetingService' that could not be found.
  • 我真的应该将我的问候服务定义为XML中的bean吗?我宁愿不那样做
  • 我需要哪些额外的注释/类/上下文管理器来确保greetingsService被正确识别和注入

@Service
置于
迎宾服务
上,如果不起作用,则检查项目结构

如果您的其他包层次结构位于带有
@SpringBootApplication
注释的主应用程序下方,则隐式组件扫描将覆盖您


如果其他包中有bean/组件不是主包的子包,则应手动将它们添加为
@ComponentScan

@Service
放在
GreetingService
上,如果不起作用,则检查项目结构

如果您的其他包层次结构位于带有
@SpringBootApplication
注释的主应用程序下方,则隐式组件扫描将覆盖您


如果其他包中的bean/组件不是主包的子包,则应手动将它们添加为
@ComponentScan

@Component
注释放在类的上方
GreetingService
不起作用。同样的错误。必须提到的是,服务类也位于不同的包中。服务类必须位于同一个包中,或者位于包含Spring Boot应用程序类的包下。你可以在这里找到很多很好的教程:在你的类上放置一个
@Component
注释
GreetingService
。不起作用。同样的错误。必须提到的是,服务类也位于不同的包中。服务类必须位于同一个包中,或者位于包含Spring Boot应用程序类的包下。你可以在这里找到很多好的教程:
@Service
@Component
@ComponentScan
都是Spring boot提供的注释,对吗?如果您使用
javax.inject.inject
,Spring引导的作用是什么?是的,现在第二个问题的答案是Spring不是唯一提供依赖项注入的框架,将来如果您更改容器并移动到另一个DI框架(如Google Guice),您需要重新配置您的应用程序。通过使用JSR-330指定的标准注释,您可以避免这种开发工作。声明为使用@Inject自动连接的bean将在Google Guice和Spring框架中工作,并且可能在支持JSR-330注释的任何其他DI容器中工作。
@服务
@Component
@ComponentScan
是Spring boot提供的注释,对吗?如果您使用
javax.inject.inject
,Spring引导的作用是什么?是的,现在第二个问题的答案是Spring不是唯一提供依赖项注入的框架,将来如果您更改容器并移动到另一个DI框架(如Google Guice),您需要重新配置您的应用程序。通过使用JSR-330指定的标准注释,可以避免这种开发工作。声明为使用@Inject自动连接的bean将在GoogleGuice和Spring框架中工作,并且可能在支持JSR-330注释的任何其他DI容器中工作。