我想使用@Repository spring注释来避免在context.xml中添加bean.我使用ibatis集成,所以我的存储库类看起来像这样
@Repository("userDao")
public class UserDaoMybatis extends SqlMapClientDaoSupport implements UserDao {
// ...
}
Run Code Online (Sandbox Code Playgroud)
SqlMapClientDaoSupport(spring库类)具有设置必需属性的最终方法,该方法未使用@Autowired或@Resourse注释
public final void setSqlMapClient(SqlMapClient sqlMapClient) {
if (!this.externalTemplate) {
this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
}
}
Run Code Online (Sandbox Code Playgroud)
SqlMapClient bean在spring context.xml中定义.如果userDao bean是用XML定义的,它工作正常,但是当我放入@Repository注释并删除bean声明时,我得到以下异常
java.lang.IllegalArgumentException: Property 'sqlMapClient' is required
Run Code Online (Sandbox Code Playgroud)
解决方法可以是添加新方法
@Aitowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
Run Code Online (Sandbox Code Playgroud)
但它看起来很难看
有没有其他方式哟注入财产没有定义?
引入一个中间超类怎么样?
public class AutowiringSqlMapClientDaoSupport extends SqlMapClientDaoSupport {
@Autowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
}
Run Code Online (Sandbox Code Playgroud)
进而
@Repository("userDao")
public class UserDaoMybatis extends AutoringSqlMapClientDaoSupport implements UserDao {
// ...
}
Run Code Online (Sandbox Code Playgroud)
是的,这是滥用继承,但并不比现有的更糟糕SqlMapClientDaoSupport,如果您迫切希望避免 DAO 类本身中的注入钩子,我想不出更好的方法。
| 归档时间: |
|
| 查看次数: |
3446 次 |
| 最近记录: |