Auflösung: Nein, ich verlängere nicht mehr das ursprüngliche Elternteil.Kann ich eine vererbte endgültige Eigenschaft mit @Autowire annotieren?
Original:
Gibt es eine Möglichkeit, eine geerbte final
Setter-Methode zu kommentieren? Ich erweitere eine Klasse, die einen final
Setter hat, den ich gerne mit @Autowire
mit Spring. Die Elternklasse stammt aus einer Bibliothek und kann nicht geändert werden.
Ein Workaround, den ich gefunden habe, ist eine Proxy-Methode schreiben, aber das scheint mehr Arbeit als nötig.
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: Obiges Beispiel modifiziert Anwendungsfall zu reflektieren:
Der Anwendungsfall ist DAO Implementierung Objekte für Ibatis/Frühjahr welche sich eine gemeinsame base class. Jedes DAO benötigt denselben Eigenschaftssatz , und jeder muss als Bean konfiguriert werden. Ich derzeit tun dies durch Konfigurieren jedes einzeln 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... -->
ich lieber Komponente Scan verwenden, um die DAO Objekte automatisch zu entdecken und autowire, die ich nicht kopieren/einfügen Murks.
<context:component-scan base-package="com.example.proj.dao.h2" />
sehe ich nicht in den annotation guide, wie man ein Eigenschaft/Mitglied mit Anmerkungen versehen würde anders als in dem erklärt. Ich hoffe, das ist etwas, das ich vermisse.
Edit 2: Ich bin nicht mehr die SqlMapClientDaoSupport-Klasse erweitern, anstatt meine AccountDao ist ein POJO, die implementiert, was wenig Funktionalität wurde von der Support-Klasse bereitgestellt wird. Dies erlaubt mir, @Autowire nach Belieben zu verwenden.
Was passiert, wenn Sie es versuchen? – skaffman
Was wäre die Syntax, um eine Methode für eine Oberklasse zu kommentieren, ohne sie in der Unterklasse neu zu deklarieren? – Chadwick