Generyczny serwis dla operacji CRUD.

0

Czy robienie generycznego DAO i generycznej warstwy usług dla podstawowych operacji CRUD to dobry pomysł?
http://www.codesenior.com/en/tutorial/Spring-Generic-DAO-and-Generic-Service-Implementation

Czym różni się wstrzykiwanie przez konstruktor i Qualifier od @Autowired private TaskDao taskDao;

 
    @Autowired
    public TaskServiceImpl(
            @Qualifier("taskDaoImpl") GenericDao<Task> genericDao) {
        super(genericDao);
        this.taskDao = (TaskDao) genericDao;
    }
1
  1. Qualifier określa nazwę beana, przydatne kiedy masz wiele beanów implementujacych ten sam interfejs.
  2. Wstrzykiwanie przez konstruktor wymaga konstruktora czyli wymaga dodania kodu którego nigdy sam nie użyjesz a ktoś przez przypadek mógłby. Wstrzykiwanie przez pole pozwala tego uniknać.
  3. @Inject zamiast @Autowired
0

Od siebie dodam, że zarówno @Inject jak i @Autowired jest poprawne i nie trzeba używać standardu: po prostu @Inject to standard JSR-330. Oznacza to, że @Inject jest dostępny w wielu różnych dostawcach DI np. Weld, Guice czy Spring. W praktyce raczej nie spotka się sytuacji, że w aplikacji będziesz zmieniał kontener DI.

Z praktycznego punktu widzenia jest jeszcze różnica taka, @Autowired ma opcjonalny parametr required (domyśnie false). Jak go ustawisz na true zachowa się jak @Inject: zwróci wyjątek jak zależność nie zostanie znaleziona.

1 użytkowników online, w tym zalogowanych: 0, gości: 1