JavaSpring将参数注入带有注释的超类中
我有一个超类,它需要子类来提供超类所运行接口的实现
我们使用Spring和DI,所以我们不能仅仅用新的
子类只有在Spring初始化后才知道提供哪个bean,所以使用超级构造函数是行不通的
我也不想在子类中使用q@PostConstruct
setup方法,因为这需要子类开发人员知道如何设置超类
我希望超类要求子类提供对实现bean的引用,以便它可以设置其成员:
超类使用UrlBuilder界面:
public class JsonConnection{
private UrlBuilder urlBuilder;
}
子类通过依赖注入提供实现(UrlBuilderFacebook
)
@Component
public class FacebookJsonConnection extends JsonConnection {
@Inject
private UrlBuilder urlBuilderFacebook;
}
超类可以是抽象的,也可以是组件,这无关紧要。重要的是,我希望能够创建轻量级子类,为超类提供UrlBuilder
,并在需要时提供@Inject
@Inject
private JsonConnection facebookJsonConnection;
或者
@Inject
private JsonConnection redmineJsonConnection;
我也不想让超类知道哪个子类在使用它
# 1 楼答案
如果
JsonConnection
需要urlBuilder
,可以将其作为构造函数参数传递,并使用构造函数注入: