2012-12-02 176 views
1

我試圖向抽象類注入(autowire)spring bean,但它似乎不起作用。將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(由於某種原因沒有被注入)。

我想通過XML做的,以及,定義爲BaseEntity摘要:

<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> 

,但仍然沒有成功。 我哪裏錯了?

+0

你還可以添加派生類中的第一對幾行嗎? – Vikdor

+2

如何獲得BaseEntity的實例? –

回答

0

我想我知道這裏有什麼問題。我試圖向一個實體注入一個spring bean - 這是不可能的(除非你使用aspectJ編織),因爲這些實體沒有被Spring實例化或管理。有道理,不是嗎?

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> 

總之,這兩個關鍵部位這樣的定義是父類上的摘要屬性和子類上的屬性。