Je voudrais utiliser l'annotation de printemps @Repository pour éviter d'ajouter un bean dans context.xml. J'utilise l'intégration de ibatis, donc ma classe référentiel ressemble à ceInjection de la propriété dérivée pour le bean @Repository sans @Autowired dans la super classe
@Repository("userDao")
public class UserDaoMybatis extends SqlMapClientDaoSupport implements UserDao {
// ...
}
SqlMapClientDaoSupport (classe de bibliothèque de printemps) a dernière méthode pour la mise en propriété requise qui ne sont pas annotées avec @Autowired ou @Resourse
public final void setSqlMapClient(SqlMapClient sqlMapClient) {
if (!this.externalTemplate) {
this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
}
}
Le bean SqlMapClient est défini au printemps context.xml. Si le haricot userDao est défini en XML, il fonctionne très bien, mais quand je mets l'annotation @Repository et supprimer la déclaration de haricots je reçois l'exception suivante
java.lang.IllegalArgumentException: Property 'sqlMapClient' is required
Une solution peut être d'ajouter une nouvelle méthode comme
@Aitowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
mais il semble moche
Y a-t-il un autre moyen d'injecter la propriété sans avoir défini?
Je pense que votre solution de contournement est assez décente. – Bozho