自动装配工厂创建的实例的 Spring 方法是什么?

发布于 2024-11-18 17:35:39 字数 1111 浏览 3 评论 0原文

我有一个控制器,它应该创建版本相关的实例(当前未实现)。

@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 是要实现的正确接口吗?

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

组件本身:

    ReportComp implements I_Report {

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

}

I have a controller which is supposed to create version dependend instances (currently not implemented).

@Controller
public class ReportController {

    @Autowired
    private ReportCompFactory       reportCompFactory;

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

The Factory looks like this:

@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;
    }
}

The created instances fields (@Autowired annotated ) are not set.
What should I do, is FactoryBean the right interface to implement?

I would prefer a solution which doesn't involve xml-configurations.

The component itself:

    ReportComp implements I_Report {

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

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓦然回首 2024-11-25 17:35:39

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

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

Spring doesn't perform autowiring if you create your objects. Here are a few options

  • define the bean to be of scope prototype - this will make the factory redundant (this is applicable in case you simply want instantiation in the factory)
  • inject the ReportDao in the factory, and set it to the ReportComp via a setter
  • inject ApplicationContext in the factory and do ctx.getAutowireCapableBeanFactory().autowireBean(instance)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文