无法在正常的实用程序类Play Framework 2.5.x中注入配置

时间:2016-10-08 15:52:21

标签: java playframework

我无法在普通的实用程序类中注入配置,它在控制器类中工作正常。

@注入 配置配置

public class EmailService { 
    public static boolean sendEmail(final AppUser appUser,final String mailString,String subject) { 
        final Properties props = new Properties(); 
        final String auth = Play.application().configuration().getString("mail.smtp.auth‌​")
        final String starttls = Play.application().configuration().getString("mail.smtp.star‌​ttls.enable"); 
    } 
}

实际上我想删除Depricated Play.application(),并希望在此类中使用我想要注入配置的配置。

1 个答案:

答案 0 :(得分:0)

依赖注入框架在构造对象的实例时注入依赖关系,因此如果您希望方法使用注入的组件,则它必须是非静态的。

你想做这样的事情,使你的sendEmail方法非静态,并提供一个接口:

@ImplementedBy(EmailServiceImpl.class)
public interface EmailService {
    void sendEmail(AppUser appUser, String mailString, String subject);
}

@Singleton
public class EmailServiceImpl implements EmailService {
    private final Configuration config;

    @Inject
    public EmailServiceImpl(Configuration config) {
        this.config = config;
    }

    public void sendEmail(AppUser appUser, String mailString, String subject) {
        final Properties props = new Properties(); 
        final String auth = config.getString("mail.smtp.auth‌​")
        final String starttls = config.getString("mail.smtp.star‌​ttls.enable");
    }
}

然后将EmailService实例注入控制器构造函数。

注意:为简单起见,这使用@ImplementedBy,但您也可以在Guice模块中配置绑定,允许您在测试中模拟它。