我试图将一个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>
但仍然没有成功。 我哪里错了?
答案 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>
简而言之,这种定义的两个关键部分是父类的抽象属性和子类的父属性。