干燥您的Spring Beans配置文件

总是在与人们讨论时,您(或人们)为证据而持有的某些东西似乎是秘密的秘密。 这就是本周发生的事情,当我在一场引发辩论的培训课程中暂时展示了一个技巧时。

让我们举个例子,但是其背后的思想当然可以应用于更多的用例:假设您开发了许多DAO类,它们继承自Spring提供的同一个抽象DAO(JPA,Hibernate,纯JDBC,您将其命名) 。 所有这些类都需要设置为数据源(或JPA EntityManager,Spring Session等)。 首次尝试时,您将这样创建Spring bean定义文件:

<beanid="dataSource".../><!-- Don't care how we obtain dataSource -->
<beanid="playerDao"class="ch.frankel.blog.app.persistence.dao.PlayerDao">
    <propertyname="dataSource"ref="dataSource"/>
</bean>
<beanid="matchDao"class="ch.frankel.blog.app.persistence.dao.MatchDao">
    <propertyname="dataSource"ref="dataSource"/>
</bean>
<beanid="stadiumDao"class="ch.frankel.blog.app.persistence.dao.StadiumDao">
    <propertyname="dataSource"ref="dataSource"/>
</bean>
<beanid="teamDao"class="ch.frankel.blog.app.persistence.dao.TeamDao">
    <propertyname="dataSource"ref="dataSource"/>
</bean>
<beanid="competitionDao"class="ch.frankel.blog.app.persistence.dao.CompetitionDao">
    <propertyname="dataSource"ref="dataSource"/>
</bean>
<beanid="betDao"class="ch.frankel.blog.app.persistence.dao.BetDao">
    <propertyname="dataSource"ref="dataSource"/>
</bean>

注意这里的模式吗? 它不仅完全反对DRY原理,而且还是导致错误以及降低未来可维护性的根源。 最重要的是,我很懒惰,我不喜欢仅仅出于乐趣而键入字符。

Spring营救。 Spring提供了使bean 抽象的方法 。 请勿将其与Java的abstract关键字混淆。 尽管未实例化Spring抽象bean,但是这些抽象bean的子级被注入其父抽象bean的属性。 这意味着您确实需要一个公共的Java父类(尽管它不必是抽象的)。 从本质上讲,您将像这样缩短Spring bean定义文件:

<beanid="dataSource".../><!-- Don't care how we obtain dataSource -->
<beanid="abstractDao"class="org.springframework.jdbc.core.support.JdbcDaoSupport"abstract="true">
    <propertyname="dataSource"ref="dataSource"/>
</bean>
<beanid="playerDao"class="ch.frankel.blog.app.persistence.dao.PlayerDao"parent="abstractDao"/>
<beanid="matchDao"class="ch.frankel.blog.app.persistence.dao.MatchDao"parent="abstractDao"/>
<beanid="stadiumDao"class="ch.frankel.blog.app.persistence.dao.StadiumDao"parent="abstractDao"/>
<beanid="teamDao"class="ch.frankel.blog.app.persistence.dao.TeamDao"parent="abstractDao"/>
<beanid="competitionDao"class="ch.frankel.blog.app.persistence.dao.CompetitionDao"parent="abstractDao"/>
<beanid="betDao"class="ch.frankel.blog.app.persistence.dao.BetDao"parent="abstractDao"/>

注入数据源的指令仅针对abstractDao配置一次。 但是,Spring会将其应用于配置为以其为父级的每个DAO。 从战RY里干...

如果使用两个不同的数据源,则只需定义两个抽象DAO,并将正确的一个设置为具体DAO的父级。

翻译自: https://blog.frankel.ch/dry-your-spring-beans-configuration-file/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值