<bean parent="someParent">
を@Componentアノテーション(アノテーションを使用してスプリングビーンを作成する)に使用する方法はありますか?@Component with parent?
私は@componentアノテーションを使用して "spring parent"を持つspring beanを作成したいと思います。
は可能ですか?
<bean parent="someParent">
を@Componentアノテーション(アノテーションを使用してスプリングビーンを作成する)に使用する方法はありますか?@Component with parent?
私は@componentアノテーションを使用して "spring parent"を持つspring beanを作成したいと思います。
は可能ですか?
私のコメントに続いて、XML
<bean id="base" abstract="true">
<property name="foo" ref="bar"/>
</bean>
<bean class="Wallace" parent="base"/>
<bean class="Gromit" parent="base"/>
のこの作品は、多かれ少なかれeqivalentこのコード(春抽象Beanがclass
を必要としないので、私は人工Base
クラスを作成したことに注意してください)にある:
public abstract class Base {
@Autowired
protected Foo foo;
}
@Component
public class Wallace extends Base {}
@Component
public class Gromit extends Base {}
Wallace
とGromit
は現在共通のFoo
プロパティにアクセスできます。それを無効にすることもできます(例: @PostConstruct
にあります。
私は実際にXMLのparent
という機能を嫌にしていましたが、DRYを維持することができましたが、Javaのアプローチはよりクリーンであるようです。これは私が持っていることができるものである
- (コンポーネント・スキャンにより注入した潜在的な実施のためのcontext.xml-宣言で豆を使用し、一般的な抽象親クラス)
人工の 'Bean'クラスと' Wallace'と 'Gromit 'を生成するか否かにかかわらず、' base' beanをXMLで定義すると、 'はコンポーネントスキャンによって作成されます。 –
ちょうど同じ構築物に出くわしました。.. @Componentクラスで行わ:私は(それは注射はないクラスのオブジェクト上で動作することを明らかにしているので、より良い)やってしまった..what
@Autowired
public void setBeanUsedInParent(BeanUsedInParent bean) {
super.setBeanUsedInParent(bean);
}
- あなたは変更することができれば親クラス:
// abstract getter in parent Class
public abstract BeanUsedInParent getBeanUsedInParent();
実際の実装(@Componentクラス)までの実際の豆だけでなく、その注入..leave:
@Autowired
private BeanUsedInParent beanUsedInParent;
@Override
public BeanUsedInParent getBeanUsedInParent() {
return this.beanUsedInParent;
}
は、あなただけの継承を使用することはできませんか?ベースクラスのオートワイヤリングも同じように動作します。 –
@Tomasz Nurkiewicz私は、XMLで定義されたスプリング親ビーンを持っています(それはいくつかのプロパティが "デフォルト"の値に設定されています)。それは私が変えることのできるものではありません。 – IAdapter
私は私の考えをさらに説明する答えを加えました。あなたのニーズに合わない理由をもう少し詳しく説明できますか? XMLで親定義を変更できないのはなぜですか?アノテーションから親を参照することはできません... –