Spring 3.2:无法将@Service注释的bean自动装配到@Bean注释的bean中-发生BeanNotFoundException

问题描述 投票:2回答:1

我不想在这里问一个问题,但是我已经研究了Stack Overflow上的20多个其他类似问题,而且似乎都不是完全相同的情况!

我有一个@ Service带注释的bean(Service1.java),我试图将其自动装配到另一个服务(Service2.java)中-问题是Service2@ Bean批注而不是@@ Service批注进行注释,因为实例化的子类可以根据特定的数据库配置进行更改。这是相关代码:

ApplicationConfig.java

@Configuration
public class ApplicationConfig {

    @Bean
    public Service2 service2() throws Exception {
        String className = Config.getString("service2.class");
        return (Service2) Class.forName(className).newInstance();
    }
}

Service1.java

@Service
public class Service1 {
    ....
}

Service2.java

public class Service2 {
    private @Autowired Service1 service1;
    ...
}

有趣的是,将Service1自动装配到另一个带有[[@Service批注的bean(Service3.java)中,可以正常工作,所以我知道bean可以初始化了。例如:

Service3.java

@Service public class Service3 { private @Autowired Service1 service1; }
有人在这里看到明显的东西吗?不幸的是,我们混合了基于XML和基于注释的bean实例化(尝试迁移到注释是一个缓慢的过程,因为我们仍然在Spring 3.2上!),因此组件扫描等操作都是在XML上下文文件中完成的。 

有趣的是,当尝试调试这种情况时,我打印出了在设置应用程序上下文时初始化的Spring bean列表,然后在加载Web应用程序的登录页面时(注释掉

Service1

(当然是Service2),而@ Service注释的bean仅出现在后面的列表中。那么这是否意味着我的问题是,在[[@Bean带注释的Bean之后总是对@ Service带注释的Bean进行初始化,因此为什么在启动时会出现异常?完整性例外:Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.eo3.eo3app.spring3.util.Service1] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 请让我知道是否需要添加其他详细信息。我显然希望能够使用
@ Service
注释对我的所有服务类进行注释,但是在每次启动应用程序时返回的子类可能不同的情况下,我不知道该如何做(类似于

Service2.java

)。我几乎忘了提到,当我将Service1.java从成为[[@Service带注释的bean更改为初始化为

@@ Bean带注释的bean时,自动装配实际上就起作用了,就像 Service2.java

非常感谢!
java spring spring-mvc spring-annotations spring-bean
1个回答
1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.