java - Autowiring 工厂创建实例的 spring 方法是什么?

标签 java spring autowired

我有一个 Controller ,它应该创建版本依赖实例(当前未实现)。

@Controller
public class ReportController {

    @Autowired
    private ReportCompFactory       reportCompFactory;

         public ModelAndView getReport() {
            I_Report report = reportCompFactory.getObject();
                      ^^^^^<- no autowiring in this instance 
         }
     ...
}

工厂看起来像这样:

@Component
public class ReportCompFactory implements FactoryBean<I_Report> {

    @Override
    public I_Report getObject() throws BeansException {
        return new ReportComp();
    }

    @Override
    public Class<?> getObjectType() {
        return I_Report.class;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

未设置创建的实例字段(@Autowired 注释)。 我该怎么办,FactoryBean 是要实现的正确接口(interface)吗?

我更喜欢不涉及 xml 配置的解决方案。

组件本身:

    ReportComp implements I_Report {

        @Autowired
        private ReportDao           reportDao;
                                     ^^^^^^^<- not set after creation
    ...
    }

}

最佳答案

如果您创建对象,Spring 不会执行 Autowiring 。这里有几个选项

  • 将 bean 定义为范围 prototype - 这将使工厂冗余(这适用于您只想在工厂中实例化的情况)
  • 在工厂中注入(inject)ReportDao,并通过setter将其设置到ReportComp
  • 在工厂中注入(inject) ApplicationContext 并执行 ctx.getAutowireCapableBeanFactory().autowireBean(instance)

关于java - Autowiring 工厂创建实例的 spring 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6596655/

相关文章:

Java:通用返回类型,使用类参数与括号调用之间的区别?

java - Spring更新到Java 7时动态属性无效

java - 如何拦截java中的方法

java - 将 mySQL 和 MS Access DB 用于仅包含单个数据表的 Java 应用程序

java - Tomcat 无法识别 DLL 文件

java - GWT Maven 集成

java - Spring @CachePut 用两个键放置相同的值

Spring Boot + Hazelcast MapStore 无法 Autowiring 存储库

在 Cobertura 检测类的情况下,Spring @Autowired 失败

java - Spring依赖注入(inject)不起作用