通过构造函数注入Bean依赖时获取NoSuchBeanDefinitionException

时间:2019-03-07 14:50:18

标签: java spring spring-boot

我正在尝试将配置Bean注入我的Service中。为此,我创建了一个单独的类EncryptionProps

public class EncryptionProps {
    @Getter
    @Setter
    @Value("${kafka.properties.security.keyreuseinterval}")
    private long keyReuseInterval;
}

然后,我正在创建另一个配置类以将其注册为bean

@Configuration
public class EncryptionConfig {
@Bean
public EncryptionProps encryptionProps() {
    return new EncryptionProps();
}}

这就是我在服务类中调用的方式:

@Service
public class EncryptionService {   
private final long keyReuseInterval;

//some more declarations    

@Autowired
public EncryptionService(SchemaProcessor schemaProcessor, CryptoLib crypto, EncryptionProps encryptionProps) {
    this.schemaProcessor = Preconditions.checkNotNull(schemaProcessor, "schemaProcessor cannot be null.");
    this.crypto = Preconditions.checkNotNull(crypto, "CryptoLib must be provided");
    this.keyReuseInterval = encryptionProps.getKeyReuseInterval();
} 

但是,当我运行此代码时,出现以下错误-org.springframework.beans.factory.NoSuchBeanDefinitionException:没有类型为'com.example.sinkad.kafka.util.EncryptionProps'的合格bean:至少预期1个符合自动装配候选条件的bean。依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}

从昨天开始,我就一直坚持下去。我已经尝试过很多关于stackoverflow的问题,但是到目前为止,没有任何帮助。有人可以帮我为什么Spring没有找到这个bean。我什至尝试在EncryptionConfig类上添加@ComponentScan。但这也不起作用。或者,只要您能指向我一些与之相关的资源即可。

谢谢!

更新:

这是我的主要课程:

package com.example.sinkad;

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

@SpringBootApplication
public class Application {

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

1 个答案:

答案 0 :(得分:0)

尝试如下:

@Component
class EncryptionProps {

    final String keyreuseinterval;

    // Use @Autowired to get @Value to work.
    @Autowired
    EncryptionProps(
        @Value("${kafka.properties.security.keyreuseinterval}") final String keyreuseinterval) {
        this.keyreuseinterval = keyreuseinterval;
    }

}