gpt4 book ai didi

spring - 在父类(super class)中为@Repository bean注入(inject)没有@Autowired的派生属性

转载 作者:行者123 更新时间:2023-12-03 11:49:12 34 4
gpt4 key购买 nike

我想使用@Repository spring 注释来避免在 context.xml 中添加 bean。
我使用 ibatis 集成,所以我的存储库类看起来像这样

@Repository("userDao")
public class UserDaoMybatis extends SqlMapClientDaoSupport implements UserDao {
// ...
}

SqlMapClientDaoSupport(spring 库类)具有设置所需属性的 final方法,该属性未使用 @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);
}

但它看起来很丑

有没有其他方法可以在没有定义的情况下注入(inject)属性?

最佳答案

引入一个中间父类(super class)怎么样?

public class AutowiringSqlMapClientDaoSupport extends SqlMapClientDaoSupport {

@Autowired
injectSqlMapClient(SqlMapClient sqlMapClient) {
setSqlMapClient(sqlMapClient);
}
}

进而
@Repository("userDao")
public class UserDaoMybatis extends AutoringSqlMapClientDaoSupport implements UserDao {
// ...
}

是的,这是滥用继承权,但不比现有的 SqlMapClientDaoSupport 差。 ,并且如果您迫切希望避免 DAO 类本身中的注入(inject)钩子(Hook),我想不出更好的方法。

关于spring - 在父类(super class)中为@Repository bean注入(inject)没有@Autowired的派生属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807707/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com