Java 属性文件中的属性返回null

Java 属性文件中的属性返回null,java,spring,spring-mvc,properties,Java,Spring,Spring Mvc,Properties,我有一个DBconfig属性文件,其属性如下: DB_url = jdbc:mysql://localhost:8080/studentdb DB_username = root DB_password = abc123 我想打印数据库服务类(DBconnect.class)中的值 当我试图从控制器打印值时,完全相同的代码工作,并且打印值 @Controller @PropertySource("classpath:DBconfig.properties") public class Home

我有一个DBconfig属性文件,其属性如下:

DB_url = jdbc:mysql://localhost:8080/studentdb
DB_username = root
DB_password = abc123
我想打印数据库服务类(DBconnect.class)中的值

当我试图从控制器打印值时,完全相同的代码工作,并且打印值

@Controller
@PropertySource("classpath:DBconfig.properties")
public class HomeController {

    @Value("${DB_url}")
    private String url;

    @Value("${DB_username}")
    private String username;

    @Value("${DB_password}")
    private String password;

    @RequestMapping(value="/", method=RequestMethod.GET)
    public String Message() {


        System.out.println(url); //jdbc:mysql://localhost:8080/studentdb      
        System.out.println(username); //root
        System.out.println(password); //abc123

        DBconnection conn = new DBconnection();
        return "home";
    }

}
为什么它在控制器中工作而不是在我的服务包中工作?我如何让它在我的服务包中工作

我在src/main/java中只有2个包

控制器包(包括HomeController.class) 服务包(包括DBconnect.class)


当您使用
@Value
时,src/main/resources包含DBconfig.properties文件,当通过
BeanPostProcessor

因此,在构造函数中,值都为null

在控制器中,您可以访问注入的值,因为bean现在已完全实例化

如果要访问服务中的注入值,请将
@Configuration
添加到类中,并将
@PostConstruct
注释添加到方法中:

@Configuration
@PropertySource("classpath:DBconfig.properties")
public class DBconnection {

@PostConstruct
public void init() {
        System.out.println(url); //jdbc:mysql://localhost:8080/studentdb      
        System.out.println(username); //root
        System.out.println(password); //abc123
}
}

如何调用DBconnection类?@Generic,方法是从控制器调用DBconnection构造函数。您可能需要向类中添加
@configuration
,并为构造函数方法添加
@postconstruct
。是否清楚?@Generic在尝试此解决方案后,我仍然收到空值。您能为我提供一个工作代码解决方案吗?谢谢尝试此解决方案后,我仍然收到空值。请完全按照我写的那样写。在
@PostConstruct
@Configuration
@PropertySource("classpath:DBconfig.properties")
public class DBconnection {

@PostConstruct
public void init() {
        System.out.println(url); //jdbc:mysql://localhost:8080/studentdb      
        System.out.println(username); //root
        System.out.println(password); //abc123
}
}