1

Spring Bean を抽象クラスに注入 (オートワイヤ) しようとしていますが、うまくいかないようです。

public abstract class BaseEntity {

    @Autowired(required = true)
    protected SecurityProvider securityService;

    public BaseEntity() {
    }
}

そして注入されたクラス:

@Component
public class SecurityService extends SecurityProviderImpl implements SecurityProvider {

    @Autowired
    public SecurityService(ICipherDescriptor cipherDescriptor) {
    super(cipherDescriptor);
    }
}

SecurityService は問題なく初期化されます (デバッグ中に確認できます) が、BaseEntity から継承するクラスは、注入された SecurityService が null であるため使用できません (何らかの理由で注入されません)。

BaseEntity を抽象として定義して、XML でも実行してみました。

<bean id="baseEntity" abstract="true" class="com.bs.dal.domain.BaseEntity">
    <property name="securityService" ref="securityService"/>
</bean>

<bean id="securityService" class="com.bs.dal.secure.SecurityService">
    <constructor-arg ref="cipherDescriptor" />
</bean>

しかし、まだ成功していません。どこが間違っていますか?

4

2 に答える 2

0

私はここで何が悪いのか知っていると思います。Spring Bean をエンティティに注入しようとしていますが、これは不可能です (aspectJ ウィービングを使用しない限り)。エンティティは Spring によってインスタンス化/管理されていないためです。理にかなっていますよね?

于 2012-12-02T16:26:30.690 に答える
0

あなたBaseEntityも春によってインスタンス化されている場合はparent、Bean 定義に属性を追加して、次のBaseEntityように定義にリンクするだけです。

<bean id="baseEntity" abstract="true" class="com.bs.dal.domain.BaseEntity">
   <property name="securityService" ref="securityService"/>
</bean>

<bean id="derivedEntity" parent="baseEntity" class="com.bs.dal.domain.DerivedEntity"/>

<bean id="securityService" class="com.bs.dal.secure.SecurityService">
   <constructor-arg ref="cipherDescriptor" />
</bean>

つまり、このような定義の 2 つの重要な部分は、親クラスの抽象属性とサブクラスの親属性です。

于 2013-08-16T15:12:43.927 に答える