我想使用@Repository spring注释来避免在context.xml中添加bean。 我使用ibatis集成,所以我的存储库类看起来像这样
@Repository("userDao")
public class UserDaoMybatis extends SqlMapClientDaoSupport implements UserDao {
// ...
}
SqlMapClientDaoSupport(spring库类)具有设置必需属性的最终方法,该方法未使用@Autowired或@Resourse
进行注释public final void setSqlMapClient(SqlMapClient sqlMapClient) {
if (!this.externalTemplate) {
this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
}
}
SqlMapClient bean在spring context.xml中定义。 如果userDao bean是用XML定义的,那么它工作正常,但是当我放入@Repository注释并删除bean声明时,我得到以下异常
java.lang.IllegalArgumentException: Property 'sqlMapClient' is required
解决方法可以是添加新方法,例如
@Aitowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
但它看起来很难看
在没有定义的情况下,是否有其他方式注入属性?
答案 0 :(得分:3)
介绍中间超类怎么样?
public class AutowiringSqlMapClientDaoSupport extends SqlMapClientDaoSupport {
@Autowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
}
然后
@Repository("userDao")
public class UserDaoMybatis extends AutoringSqlMapClientDaoSupport implements UserDao {
// ...
}
是的,这是滥用继承,但并不比现有的SqlMapClientDaoSupport
更糟糕,如果你急于避免DAO类中的注入钩子,我想不出更好的方法。 / p>