Resolución: No, ya no extiendo el padre original.¿Puedo anotar una propiedad final heredada con @Autowire?
Original:
¿Hay alguna forma de anotar un método heredado final
setter? Estoy extendiendo una clase que tiene un setter final
que me gustaría @Autowire
con Spring. La clase principal es de una biblioteca y no se puede modificar.
Una solución alternativa que he encontrado es escribir un método proxy, pero esto parece más trabajo de lo necesario.
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);
}
}
Editar 1: Por encima de ejemplo modificado para reflejar caso de uso:
El caso de uso está implementando DAO objetos para Ibatis/Primavera que se extienden una común base class. Cada DAO necesita el mismo conjunto de propiedades , y cada uno debe configurarse como un bean. Actualmente, hago esto configurando cada uno individualmente en 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... -->
yo preferiría utilizar el componente de exploración para descubrir y Autowire la DAO objetos automáticamente, lo que no puedo copiar/pegar chapuza.
<context:component-scan base-package="com.example.proj.dao.h2" />
no veo en el annotation guide cómo se podría anotar un propiedad/miembro distinto de donde declarada. Espero que sea algo que me falta.
Edición 2: yo ya no estoy extendiendo la clase SqlMapClientDaoSupport, en lugar de mi AccountDao es un POJO que implementa la poca funcionalidad estaba siendo proporcionado por la clase de apoyo. Esto me permite usar @Autowire a voluntad.
¿Qué sucede cuando lo intentas? – skaffman
¿Cuál sería la sintaxis para anotar un método en una superclase, sin redeclarlo en la subclase? – Chadwick