我有一个DBconfig属性文件,其属性如下;
DB_url = jdbc:mysql://localhost:8080/studentdb
DB_username = root
DB_password = abc123
我想打印数据库服务类(DBconnect.class)中的值,
@PropertySource("classpath:DBconfig.properties")
public class DBconnection {
private Connection con= null;
@Value("${DB_url}")
private String url;
@Value("${DB_username}")
private String username;
@Value("${DB_password}")
private String password;
public DBconnection() {
System.out.println(url); // Output = null
System.out.println(username); // Output = null
System.out.println(password); // Output = null
}
}
完全相同的代码工作,当我尝试从控制器打印值时打印值;
@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)
src / main / resources包含DBconfig.properties文件
答案 0 :(得分:1)
使用@Value
时,通过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
}
}