Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Pattern strategy & @Inject / 4 сообщений из 4, страница 1 из 1
22.11.2017, 14:14
    #39557518
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pattern strategy & @Inject
Сам паттерн стратегия
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
public interface UserStrategy {
  User login();
}

@Service
public class AbstractUserStrategy {
  @Inject
  protected MessageService messageService;
}

@Service
@Log4j2
public class User1 extends AbstractUserStrategy implements UserStrategy {
  @Override
  public User login() {
...
    return user;
  }
}

public class CommonUserStrategy {
  private UserStrategy userStrategy;

  public CommonUserStrategy(UserStrategy userStrategy) {
    this.userStrategy = userStrategy;
  }

  public User login() {
    return userStrategy.login();
  }
}



Вызов паттерна
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
@Service
@Log4j2
public class UserServiceImpl implements UserService {
  private static Map<String, CommonUserStrategy> userStrategyMap = new HashMap<String, CommonUserStrategy>();
...

  static {
    CommonUserStrategy user1 = new CommonUserStrategy(new User1());
    CommonUserStrategy user2 = new CommonUserStrategy(new User2());

    userStrategyMap.put(UserType.USER1.name(), user1);
    userStrategyMap.put(UserType.USER2.name(), user2);
  }

  @Override
  public User getUserByLoginPass(String login, String password, UserType userType) {
...
    CommonUserStrategy commonUserStrategy = userStrategyMap.get(userType.name());
    if (commonUserStrategy != null) {
      user = commonUserStrategy.login(userEntity, UserUtil.getAvatarUrl(userEntity, contentService));
    }
    return user;
  }
}



Собственно вопрос почему AbstractUserStrategy messageService = null
Может надо было явно создавать, а инъектить тоже
CommonUserStrategy user1 = new CommonUserStrategy(new User1());
...
Рейтинг: 0 / 0
22.11.2017, 14:37
    #39557533
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pattern strategy & @Inject
это что вообще? spring, java ee или еще какая хрень? если ты создаешь экземпляр user1 или user2 вручную путем вызова конструктора, откуда в нем возьмутся инъекции?
...
Рейтинг: 0 / 0
22.11.2017, 14:49
    #39557545
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pattern strategy & @Inject
chpasha,

Это я уже и понял, а как лучше заинъектить это?
...
Рейтинг: 0 / 0
22.11.2017, 15:26
    #39557587
chpasha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pattern strategy & @Inject
-=Koba=-а как лучше заинъектить это?
средствами используемого фреймворка естественно, какие еще могут быть варианты? Как правило любой dependency injection фреймворк поддерживает как "декларативную" (не знаю какой термин тут правильней использовать) инъекцию путем ее декларации в коде, так и динамическую (что-то на подобие injector.getInstance(Class)). По хорошему, если реализаций больше 1й и выбор зависит от какого-то условия (как в примере), то желательно динамическую инъекцию использовать.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Pattern strategy & @Inject / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]