Есть несколько вариантов реализации DAO
интерфейса. Один из компонентов может принимать в качестве параметра в конструктор этот интерфейс. Но как мне определить для спринга какую реализацию использовать?
public interface DAO {
void add(Item item);
Item getItem(int id);
}
public class DAOMemory implements DAO {
private final List<Item> memory;
public DAOMemory() {
memory = new ArrayList<>(100);
}
}
public class DAOJdbc implements DAO {
@Autowired
public DAOJdbc(final PropertiesLoader properties) {
this.properties = properties;
}
}
И класс который использует DAO
:
@Component
public class UserManager {
private final DAO dao;
//Вот тут проблема. Не понятно какой DAO я собираюсь использовать.
@Autowired
public UserStore(final DAO dao) {
this.dao = dao;
}
...
}
Как как без костылей дать понять Spring, какую реализацию я хочу использовать в каждом конкретном случае? И соответствует ли вообще такой стиль написания кода этому фраемворку?
Вы можете использовать аннотацию @Qualifier с указанием именем бина:
@Component
public class UserManager {
private final DAO dao;
@Autowired
@Qualifier("daoJdbc")
public UserStore(final DAO dao) {
this.dao = dao;
}
...
}
И в конфигурации контекста этот бин определить:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
...
<bean id="daoJdbc" class="com.example.DAOJdbc" />
</beans>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Для начала прогнали бы этот код в любой IDE, а потом уже писали бы сюдаИ у вас опечатка в названии метода receivedD в DImp2
Добрый день! Как узнать версию zabbix-java-gateway? Пробовал через команду:
Пишу автотест, который проверяет некое поле на сайте, на соответствиеВсе работает нормально, но: обычно обращаюсь к какому-либо элементу...