【发布时间】:2017-05-16 08:41:35
【问题描述】:
我有一些来自外部库的 java 对象,我需要在我的 spring 项目中注入这些对象。问题是库中的类不知道任何spring api的
如果我使用 @Autowired 将 bean 从库中注入到服务中,我会得到 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
以下是我的服务类
@Path("/test")
public class TestService {
@Autowired
SomeOtherClass service;
@GET
public Response get(){
return Response.ok(service.someMethod()).build();
}
}
以下是我不知道春天的图书馆课程
public class SomeOtherClass {
public String someMethod(){
return "Data from library";
}
}
当我调用我的服务时,我得到异常
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.SomeOtherClass' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
有没有办法在spring中注入一个类似于**CDI**中的注入的普通Java对象?
有一个选项可以定义 applicationcontext.xml 并在 xml 中定义 SomeOtherClass 并使用 getBean,但我不想这样做。还有其他选择吗?
注意:
无法考虑以下选项,因为我有100's 的类来自库
Cannot use applicationcontext.xmlCannot @Configuration @Bean to produce beans.
【问题讨论】:
-
你不需要
getBean你只需要声明一个SomeOtherClass的实例然后@Autowired就可以工作了。 Spring 只会注入托管 bean(就像 CDI 一样,如果某些东西不是托管 bean,它也不会注入任何东西)。 -
那么不要使用 spring... 你需要让这些类成为 spring 托管实例,否则它将无法工作。如果您不能(或不会)使用基于 xml 或 java 的配置,那么 spring 无能为力。 (虽然你可以扩展 spring 来检测/扫描这些类,但这需要一些关于 spring 的内部和工作的知识)。
标签: spring dependency-injection