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 因为它是空的(由于某种原因没有被注入)。

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

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

4

2 回答 2

0

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

于 2012-12-02T16:26:30.690 回答
0

如果您BaseEntity也被spring实例化,您只需向parentbean定义添加一个属性以将其链接到您的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>

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

于 2013-08-16T15:12:43.927 回答