Передать значения @Value в класс Config - PullRequest
0 голосов
/ 12 июня 2019

У меня есть класс конфигурации, в котором я устанавливаю свойства JavaMailSenderImpl, но я хочу не устанавливать значения в @Bean, а просто установить их для получения через методы (например: mailSender.setPort(ClassImpl.getPort());).Ниже приведен код, и я попытался передать значения через геттеры, но я получил 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

1 Ответ

0 голосов
/ 12 июня 2019

Как прокомментировал zapl, я добавил ClassImpl в параметр @Bean, и он отлично работает.

@Bean
public JavaMailSenderImpl mailSenderService(ClassImpl ci) {
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...