将spring bean注入抽象类

时间:2012-12-02 11:53:15

标签: spring abstract-class autowired

我试图将一个spring bean注入(autowire)一个抽象类,但它似乎没有用。

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(由于某种原因没有注入)。

我也试过通过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>

但仍然没有成功。 我哪里错了?

2 个答案:

答案 0 :(得分:0)

我想我知道这里有什么问题。我正在尝试向实体注入一个spring bean - 这是不可能的(除非你使用aspectJ编织),因为实体不是由Spring实例化/管理的。有道理,不是吗?

答案 1 :(得分:0)

如果您的BaseEntity也是由spring实例化的,您只需要在bean定义中添加parent属性,将其链接到您的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>

简而言之,这种定义的两个关键部分是父类的抽象属性和子类的属性。