在抽象类中定义的Spring autowire依赖项

时间:2013-10-31 18:59:49

标签: java spring

我有一个带有@Autowired依赖项的抽象类“Command”和扩展抽象类的类。依赖性没有被注入。抽象和具体类使用@Component注释并正在扫描。似乎基础(抽象)类不是Spring管理的。需要做些什么呢?是否有注释将其定义为抽象?我不想用XML定义bean。

public abstract class Command {
  @Autowired
  private SecurityUtils securityUtils;
....

@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
@Component
public class NoteCommand extends Command {
...
}

我的错误,我道歉。命令类是在我的控制器中注入的,其中一个(NoteCommand)中有许多是通过“new”手动实例化的。一切都很好。

2 个答案:

答案 0 :(得分:0)

这可以通过XML配置实现(不确定注释)。阅读此http://docs.spring.io/spring-framework/docs/3.0.0.RC3/reference/html/ch03s07.html

试试这个(将其他配置添加到子bean?)

<bean id = "command" class = "some.package.name.Command" abstract = "true">
  <property name = "securityUtils" ref = "securityUtils"/>
</bean>

<bean id ="noteCommand" class = "some.package.name.NoteCommand" parent="commadn">

</bean>

喝彩!

答案 1 :(得分:-1)

在我的情况下,在Spring4应用程序中,我必须使用经典的抽象工厂模式(我从这个想法 - http://java-design-patterns.com/patterns/abstract-factory/)创建实例,每次都有一个操作要完成所以我的代码设计如下:

**@Configurable(dependencyCheck = true)**

最初为了在抽象类中注入依赖项,我尝试了所有构造型注释,如@ Component,@ Service等,但即使Spring上下文文件具有整个包的ComponentScanning,但在某种程度上创建Subclasses的实例,如CampaignOperation,Super Abstract由于Spring无法识别并注入其依赖项,因此类EO的属性为null。经过多次试验和错误后,我使用了这个<context:annotation-config /> <context:component-scan base-package="com.xyz" /> 注释,最后Spring能够注入依赖项,并且我能够使用这些属性在子类中没有使用太多属性使它们混乱。

**@Configurable(dependencyCheck = true)**

我也尝试过这些其他参考资料来找到解决方案:

  1. http://www.captaindebug.com/2011/06/implementing-springs-factorybean.html#.WqF5pJPwaAN
  2. http://forum.spring.io/forum/spring-projects/container/46815-problem-with-autowired-in-abstract-class
  3. https://github.com/cavallefano/Abstract-Factory-Pattern-Spring-Annotation
  4. http://www.jcombat.com/spring/factory-implementation-using-servicelocatorfactorybean-in-spring
  5. https://www.madbit.org/blog/programming/1074/1074/#sthash.XEJXdIR5.dpbs
  6. Using abstract factory with Spring framework
  7. Spring Autowiring not working for Abstract classes
  8. Inject spring dependency in abstract super class
  9. Spring and Abstract class - injecting properties in abstract classes
    1. Spring can you autowire inside an abstract class?
  10. 请尝试使用var f = function(myVar) { alert(myVar); } f('hello'); 并更新此帖子,如果您遇到任何问题,我可以尝试帮助您。