#java #playframework
#java #playframework
Вопрос:
Я не могу внедрить конфигурацию в обычные служебные классы, она отлично работает в классе контроллера.
@Inject Configuration конфигурация
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.starttls.enable");
}
}
На самом деле я хочу удалить устаревший Play.application() и хочу использовать Configuration для этого, я хочу внедрить конфигурацию в этот класс.
Комментарии:
1. Пожалуйста, расскажите немного подробнее, как именно выглядит ваш служебный класс
2. общедоступный класс EmailService { общедоступная статическая логическая почта отправки (конечный AppUser AppUser, конечная строка mailString, строка subject) { конечные свойства props = новые свойства (); конечная строка auth = Play.application().configuration().getString(«mail.smtp.auth»); конечная строка starttls = Play.application().configuration().getString(«mail.smtp.starttls.enable»); } На самом деле я хочу удалить устаревший Play.application() и хочу использовать Configuration для этого Я хочу внедрить конфигурацию в этот класс
Ответ №1:
Фреймворки внедрения зависимостей вводят зависимости при создании экземпляров объектов, поэтому, если вы хотите, чтобы метод использовал внедренный компонент, он должен быть нестатическим.
Вы хотите сделать что-то подобное, сделав ваш метод 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.starttls.enable");
}
}
Затем внедрите EmailService
экземпляр в конструкторы вашего контроллера.
Примечание: это используется @ImplementedBy
для простоты, но вы также можете настроить привязку в своем модуле Guice, что позволит вам имитировать ее в тестах.