代码之家  ›  专栏  ›  技术社区  ›  Chadwick

我可以用@autowire注释继承的最终属性吗?

  •  5
  • Chadwick  · 技术社区  · 15 年前

    解决方法:不,我不再扩展原始父级。

    原件:
    有没有方法来注释继承的 final 设定法?我正在扩展一个具有 最终的 我想要的二传手 @Autowire 带着春天。父类来自库,无法修改。

    我发现的一个解决方法是编写代理方法,但这似乎比必要的工作更多。

    public abstract class SqlMapClientDaoSupport ... {
        public final void setSqlMapClient(SqlMapClient smc) {
            ...
        }
    }
    
    @Component
    public class AccountDao extends SqlMapClientDaoSupport {
        // all this just to annotate an existing method?
        @Autowire
        public final void setSqlMapClientWorkaround(SqlMapClient smc) {
            super.setSqlMapClient(smc);
        }
    }
    

    编辑1: 上面的示例修改为反映用例:
    用例是为ibatis/spring实现DAO对象 这扩展了一个共同点 base class . 每个刀都需要相同的 属性集,每个属性都需要配置为bean。我目前 通过在中分别配置每个 applicationContext.xml .

    <bean id="accountDAO" 
      class="com.example.proj.dao.h2.AccountDAOImpl"
      p:sqlMapClient-ref="sqlMapClient" />
    <bean id="companyDAO" 
      class="com.example.proj.dao.h2.CompanyDAOImpl"
      p:sqlMapClient-ref="sqlMapClient" />
    <!-- etc... -->
    

    我希望使用组件扫描来发现和自动连接DAO 自动复制/粘贴对象。

    <context:component-scan base-package="com.example.proj.dao.h2" />
    

    我看不到里面 annotation guide 如何注释 财产/成员,但声明的除外。我希望是这样 但我错过了一些东西。

    编辑2: 我不再扩展sqlmapclientdao支持类,而我的accountdao是一个pojo,它实现了支持类所提供的小功能。这允许我随意使用@autowire。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Michael Wiles    15 年前

    您尝试过用XML配置它吗?因为它是一个现有的类,看起来您不能更改它,所以它是用XML配置它的一个明确的候选者。然后可以将其指定为autowire”,甚至可以在XML中配置属性。

        2
  •  0
  •   JARC    15 年前

    在我看来,你不应该试图设立一个最后的领域。

    通常有一个很好的理由说明字段是最终的。

    是否设置了sqlmapclientFactoryBean对象?

    here for help

        3
  •  0
  •   Chadwick    15 年前

    不,无法对继承的最终方法进行注释。

    而不是扩展支持类( SqlMapClientDaoSupport )我在我的项目中重新实现了它(它的行为是最小的),根据需要注释方法,我的DAO扩展了这个支持类。

        4
  •  0
  •   yincrash    14 年前

    您可以为最终的和 @Autowired 然后调用构造函数中的setter。