Java 使用注入的Spring引导DI。未识别的类别
我正在尝试运行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(
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容器中工作。