Bonne façon d'injecter de la classe parent dépendances avec le Printemps, les annotations
J'ai suivantes code -
Dao.java
@Component
public class Dao extends NamedParameterJdbcDaoSupport {
}
dbContext.xml
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.jdbc.url}" />
<property name="username" value="${db.user}" />
<property name="password" value="${db.password}" />
</bean>
applicationContext.xml
<context:component-scan base-package="com.kshitiz" />
Le problème est que NamedParameterJdbcDaoSupport
besoins de la source de données pour fonctionner.
Puisque c'est une propriété de la super-classe et non de ma propre classe, la seule façon que je pouvais penser pour le faire fonctionner, est -
@Component
public class Dao extends NamedParameterJdbcDaoSupport {
@Autowired
public void setDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
}
C'est assez laid. Puis-je préciser que je veux autowire toutes les propriétés de mon haricot? Quelque chose comme -
@Component(default-autowire="byType")
public class Dao extends NamedParameterJdbcDaoSupport {
}
Est-ce possible au Printemps? Sinon quelle est la façon la plus élégante pour injecter de la super-classe des dépendances?
Edit:
Je sais déjà ce qui peut être fait à l'aide de XML qui je suis présentement à l'aide. J'aimerais savoir quel est le meilleur qui peut être fait à l'aide d'annotations.
OriginalL'auteur Kshitiz Sharma | 2013-05-24
Vous devez vous connecter pour publier un commentaire.
Pas forcément la réponse que vous cherchiez, mais je voudrais le faire avec un intermédiaire super classe.
DaoSupport
: stackoverflow.com/a/21992433/173149Pas valide au Printemps version 4. Méthode
setDataSource()
est marqué comme final et pas possible de déroger.OriginalL'auteur Zutty
J'ai cherché quelque chose de similaire lors de l'utilisation de Ressort de la mise en veille prolongée. Il n'y a aucun moyen de l'ajout (ou la modification) le câblage dans une super-classe sans sous-classement et en remplaçant la méthode requise. Ou l'approche déclarative de sous-classement et de fournir un ref de la valeur pour les propriétés souhaitées via XML.
Rien de moins "moche" serait probablement moins transparent. Donc, Zutty la solution proposée correspond le mieux ici, car il élimine le besoin de remplacement dans chaque Dao mise en œuvre.
OriginalL'auteur BrokenMill
Cela peut être fait de manière transparente à l'aide de configuration xml. Si vous souhaitez utiliser les annotations, un appel à super comme vous êtes maintenant, c'est probablement la meilleure façon d'aller.
OriginalL'auteur Tom McIntyre
Si c'est nécessaire pour votre classe pour travailler (et il l'est probablement dans un DAO), il devrait être un argument du constructeur pas une propriété. Puisque vous êtes permettra à l'autowiring, vous n'avez ni besoin. Faire protégées dans le parent et autowire. Votre enfant aura une référence à elle.
OriginalL'auteur fpmoles