将 @Value 值传递给 Config class
Pass @Value values to Config class
我有一个配置 class,我在其中设置 JavaMailSenderImpl
属性,但我不想在 @Bean
中设置值,只是将它们设置为获取通过方法(例如:mailSender.setPort(ClassImpl.getPort());
)。下面是代码,我试图通过 getter 传递值,但我得到了 npe。
//properties.file
mail.host=the_host
mail.port=123
mail.username=the_username
mail.password=the_password
// ClassInterface has only one sendMail method
@Component
public class ClassImpl implements ClassInterface{
@Value("${mail.host}")
public String host;
@Value("${mail.port}")
private int port;
@Value("${mail.username}")
private String username;
@Value("${mail.password}")
private String password;
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
@Autowired
JavaMailSenderImpl mailSender;
@Override
public void sendMail(String sender, String receiver, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sender);
message.setTo(receiver);
message.setSubject(subject);
message.setText(content);
mailSender.send(message);
}
}
@Configuration
@ComponentScan
public class SpringConfiguration {
@Bean
public JavaMailSenderImpl mailSenderService() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host_here);
mailSender.setPort(port_here);
mailSender.setUsername(user_here);
mailSender.setPassword(pwd_here);
return mailSender;
}
}
编辑
尝试创建此 getHost static
并传递如下方法:
mailSender.setHost(ClassImpl.getHost());
// but I get the 'refused to connect' and it sets the value to 'localhost'
// and not to the value @Value host I need from properties.file
正如 zapl 评论的那样,我在 @Bean 参数中添加了 ClassImpl,它工作正常。
@Bean
public JavaMailSenderImpl mailSenderService(ClassImpl ci) {
....
我有一个配置 class,我在其中设置 JavaMailSenderImpl
属性,但我不想在 @Bean
中设置值,只是将它们设置为获取通过方法(例如:mailSender.setPort(ClassImpl.getPort());
)。下面是代码,我试图通过 getter 传递值,但我得到了 npe。
//properties.file
mail.host=the_host
mail.port=123
mail.username=the_username
mail.password=the_password
// ClassInterface has only one sendMail method
@Component
public class ClassImpl implements ClassInterface{
@Value("${mail.host}")
public String host;
@Value("${mail.port}")
private int port;
@Value("${mail.username}")
private String username;
@Value("${mail.password}")
private String password;
public String getHost() {
return host;
}
public int getPort() {
return port;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
@Autowired
JavaMailSenderImpl mailSender;
@Override
public void sendMail(String sender, String receiver, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(sender);
message.setTo(receiver);
message.setSubject(subject);
message.setText(content);
mailSender.send(message);
}
}
@Configuration
@ComponentScan
public class SpringConfiguration {
@Bean
public JavaMailSenderImpl mailSenderService() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost(host_here);
mailSender.setPort(port_here);
mailSender.setUsername(user_here);
mailSender.setPassword(pwd_here);
return mailSender;
}
}
编辑
尝试创建此 getHost static
并传递如下方法:
mailSender.setHost(ClassImpl.getHost());
// but I get the 'refused to connect' and it sets the value to 'localhost'
// and not to the value @Value host I need from properties.file
正如 zapl 评论的那样,我在 @Bean 参数中添加了 ClassImpl,它工作正常。
@Bean
public JavaMailSenderImpl mailSenderService(ClassImpl ci) {
....