当前位置: 首页 > 面试题库 >

自动连接工厂创建的实例的Spring方式是什么?

江煜
2023-03-14
问题内容

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

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

}

问题答案:

如果创建对象,Spring不会执行自动装配。这里有一些选择

  • 将bean定义为作用域prototype-这将使工厂冗余(适用于仅在工厂中实例化的情况)
  • ReportDao在工厂注入,然后ReportComp通过设置器将其设置为
  • 注入ApplicationContext工厂并做ctx.getAutowireCapableBeanFactory().autowireBean(instance)


 类似资料:
  • 我有一个遗留产品的JAR,它包含Spring(4.3.8)托管类。我需要将它与CDI(JavaEE 7)集成。 我有一个来自遗留JAR的接口,由cdibean实现。CDIBean从CDIBeanManager请求,并从工厂方法返回。工厂方法在SpringXML中注册并按预期工作。 当遗留JAR的Spring bean依赖于实现的接口时,就会出现问题。Spring than注入CDI实现实例,并扫描

  • 10.2.1 结构体工厂 Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂”方法。为了方便通常会为类型定义一个工厂,按惯例,工厂的名字以 new 或 New 开头。假设定义了如下的 File 结构体类型: type File struct { fd int // 文件描述符 name string // 文

  • 考虑到一个由许多实体组成的项目,我有一个服务需要知道实体的类型才能执行一个方法。我创造; 和例如; 我想创建一个工厂来返回正确的Bean(我使用的是spring boot)来使用,我定义了这个Bean: 这是可行的,但我有一个(声纳)警告说,我不应该“原始”使用作为工厂方法的返回类型。实现这一点的正确方法是什么?使用通配符是另一个警告。 目标是有一个返回正确bean的工厂。是最初的设计错了吗?

  • 我有一个服务层,可以像这样自动连接存储库 我有了新的要求,根据商店的数量,存储库查询逻辑应该改变。我正在考虑抽象我的存储库并使用工厂模式。当前存储库是一个接口,并扩展了JpaRepository此外,它的所有函数都使用@Query注释来定义JPQL。这是一个只有一个函数的例子,但是在我的实际存储库中有几个函数 新要求指出,对于特定的 storeId,SQL 需要更改为如下所示的内容: 但是,所有剩

  • 我是Spring的新手。我正面临Spring-Boot的问题。我正在尝试将外部配置文件中的字段自动装配到自动装配的bean中。我有以下类 应用程序。Java语言 AppConfig。Java语言 服务接口 服务1 我无法在App类的postconstruct方法中显示服务名称变量。我这样做对吗?

  • 我已经创建了一个注释来调用Spring Boot项目中的Spring AOP方面。所有的工作都很好,直到我尝试将一个依赖项自动转化到方面:自动转化不会发生。 我在stackoverflow的各种问题中读到,这是因为方面不是Spring管理的。如果之前已经回答了这个问题,请原谅,但是我已经尝试了stackoverflow中提到的各种解决方案,包括使用@Configurable和实现Applicati