Risoluzione: No Non sto più estendendo il genitore originale.Posso annotare una proprietà finale ereditata con @Autowire?
Originale:
C'è un modo per annotare un metodo setter ereditato final
? Sto estendendo una classe che ha un setter final
che vorrei @Autowire
con Spring. La classe genitore proviene da una libreria e non può essere modificata.
Una soluzione alternativa che ho trovato è scrivere un metodo proxy, ma questo sembra più un lavoro del necessario.
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);
}
}
Edit 1: Sopra esempio modificato per riflettere caso d'uso:
Il caso di utilizzo sta attuando oggetti DAO per Ibatis/Spring estendentisi un comune base class. Ogni DAO richiede lo stesso set di proprietà e ciascuno deve essere configurato come bean. Attualmente lo lo faccio configurando singolarmente in 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... -->
io preferirei usare componente-scan per scoprire e autowire DAO oggetti automaticamente, che non riesco a copiare/incollare pasticcio.
<context:component-scan base-package="com.example.proj.dao.h2" />
non vedo nel annotation guide come si potrebbe annotare un immobile/membro diverso da quello in cui ha dichiarato. Spero che sia lo qualcosa che mi manca comunque.
Edit 2: Non sono più estendendo la classe SqlMapClientDaoSupport, invece il mio AccountDao è un POJO che implementa quello che poche funzionalità sono state fornite dalla classe di supporto. Questo mi permette di usare @Autowire a volontà.
Cosa succede quando ci provi? – skaffman
Quale sarebbe la sintassi per annotare un metodo su una superclasse, senza ridichiarlo nella sottoclasse? – Chadwick