Разрешение: Нет, я больше не расширяю оригинального родителя.
Оригинал:
Есть ли способ аннотировать унаследованный final
метод установки? Я расширяю класс с final
установщиком, который я бы хотел @Autowire
с помощью Spring. Родительский класс взят из библиотеки и не может быть изменен.
Обходной путь, который я нашел, - это написать прокси-метод, но, похоже, это больше работы, чем необходимо.
public abstract class SqlMapClientDaoSupport ... {
public final void setSqlMapClient(SqlMapClient smc) {
...
}
}
@Component
public class AccountDao extends SqlMapClientDaoSupport {
// all this just to annotate an existing method?
@Autowire
public final void setSqlMapClientWorkaround(SqlMapClient smc) {
super.setSqlMapClient(smc);
}
}
Редактировать 1: Приведенный выше пример изменен для отражения варианта использования:
Вариант использования реализует объекты DAO для Ibatis / Spring
которые расширяют общий базовый класс . Каждый DAO нуждается в том же
Свойство установлено, и каждый из них должен быть настроен как компонент. Я сейчас
Сделайте это, настроив каждый в отдельности в applicationContext.xml
.
<bean id="accountDAO"
class="com.example.proj.dao.h2.AccountDAOImpl"
p:sqlMapClient-ref="sqlMapClient" />
<bean id="companyDAO"
class="com.example.proj.dao.h2.CompanyDAOImpl"
p:sqlMapClient-ref="sqlMapClient" />
<!-- etc... -->
Я бы предпочел использовать компонентное сканирование для обнаружения и автоматического подключения DAO
объекты автоматически, которые я не могу скопировать / вставить Botch.
<context:component-scan base-package="com.example.proj.dao.h2" />
Я не вижу в руководстве по аннотациям , как можно комментировать
собственность / член, отличная от заявленной. Я надеюсь, что это
что-то я упускаю, хотя.
Редактировать 2: Я больше не расширяю класс SqlMapClientDaoSupport, вместо этого мой AccountDao - это POJO, который реализует те небольшие функциональные возможности, которые предоставляет класс Support. Это позволяет мне использовать @Autowire по желанию.