Java Spring 引导@Autowired 值为空

Java Spring Boot @Autowired values are null

当我尝试打印我已自动装配的变量时,它打印“null”而不是我设置的值“Example”。我不太明白我错过了什么

在我的 AppConfig class 我有:

@Configuration
public class ApplicationConfiguration {
   @Bean
     public String tableName(){
       return "Example";
     }
}

在我的另一个 class,DAOMethods 中,我想自动装配变量:

@Component
public class DAOMethods {
    @Autowired
    private String tableName;

    public void print(){
        System.out.println(tableName);
    }
}

你的问题有很多解决办法 F.e。您可以使用所需的参数集创建 config-class,然后自动装配它(从应用程序配置文件中使用 @Value 注释注入值是一个好习惯):

@Component
public class CustomConfiguration {
    @Value("${table.name}")
    private String tableName;

    @Value("${some.value}")
    private Integer someValue;

    public String getTableName() {
            return tableName;
    }

     public Integer getsomeValue() {
            return someValue;
    }
}

而你 application.properties 将看起来像:

some.value=1
table.name=Example

或者您可以使用@Value 注解简单地从配置中注入单个值

解决方案之一是在@Value 注释中使用 bean 名称:

@Configuration
public class ApplicationConfiguration {
   @Bean
     public String tableName(){
       return "Example";
     }
}

@Component
public class DAOMethods {
    @Value(#{tableName})
    private String tableName;
}

您可以在这个问题中看到更多示例:Autowire a string from Spring @Configuration class?

They exist in different packages; With AppConfig living in a config folder and DAOMethods in client->dynamodb->util folder. Config and Client are folders under the main->java folder

添加的@Configuration注解扫描当前包及其子包中的bean。您需要明确告诉应用程序扫描所需的包。所以你可以这样做:

@SpringBootApplication (scanBasePackages = {"config", "client"})

或者,

您需要将配置和使用该配置的其他 classes 保留在同一个根包中。您可以将 config 文件夹和 client 文件夹放在同一个包下,比如 com.application 然后在您的 main class:

中添加以下内容
@SpringBootApplication(scanBasePackages = "com.application")

现在运行申请。