将 @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) {
....