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")
现在运行申请。
当我尝试打印我已自动装配的变量时,它打印“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")
现在运行申请。