当前位置: 首页 > 知识库问答 >
问题:

Spring依赖注入在singleton类中不起作用

艾自强
2023-03-14

我做了一个名为AcessoCliente的单例类

public class AcessoCliente {

    private HashMap<String, Cliente> clientes;
    private new HashMap<String, Date> clientesNaoEncontrados;

    private static AcessoCliente instance;

    static {
        instance = new AcessoCliente();
    }

    public static AcessoCliente get() {
        return instance;
    }

    private AcessoCliente() {
        clientes = new HashMap<String, Cliente>();
        clientesNaoEncontrados = new HashMap<String, Date>();
    }

    /*business*/
}

但我需要对我的单例类执行一个名为ValidadorNivelDeAcessoBusiness的类的依赖注入

@Component
public class ValidadorNivelDeAcessoBusiness {

    @Autowired
    QuerysNiveisDeAcesso querysNiveisDeAcesso;
    /*business*/
}
public class AcessoCliente {

    @Autowired
    ValidadorNivelDeAcessoBusiness validadorNivelDeAcessoBusiness;

    private HashMap<String, Cliente> clientes;
    private new HashMap<String, Date> clientesNaoEncontrados;

    private static AcessoCliente instance;

    static {
        ApplicationContext context = new AnnotationConfigApplicationContext(AcessoCliente.class);
        instance = context.getBean(AcessoCliente.class);
    }

    public static AcessoCliente get() {
        return instance;
    }

    private AcessoCliente() {
        clientes = new HashMap<String, Cliente>();
        clientesNaoEncontrados = new HashMap<String, Date>();
    }

    /*business*/
}
@Component
public class QuerysNiveisDeAcesso extends QuerysClientes {

    public QueryIntegratorBuilder queryBuscaNiveisDeAcesso(String[] condicoesQuery) throws Exception {
        return super.executaQuery("BUSCA_NIVEIS_DE_ACESSO", condicoesQuery);
    }

    public QueryIntegratorBuilder queryBuscaNiveisDeAcesso() throws Exception {
        return super.executaQuery("BUSCA_NIVEIS_DE_ACESSO");
    }

    public QueryIntegratorBuilder queryBuscaNiveisDeAcesso(String sqlWhere, String[] condicoesQuery) throws Exception {
        return super.executaQuery("BUSCA_NIVEIS_DE_ACESSO", condicoesQuery, sqlWhere);
    }

}

共有1个答案

赵献
2023-03-14

你完全误用了Spring的目的。

首先,在Acessocliente类中创建应用程序上下文是没有意义的。

应用程序上下文是一个“全局”的Spring注册表对象,通常在整个应用程序中存在一次。

因此,总结一下,你需要这样的东西:

public class Main {
   public static void main(String  [] args) {
     ApplicationContext ctx = ...;
     ctx.getBean(SomeClassThatStartsTheFlow.class).doSomething();
   }    
}

@Service
public class AcessoCliente {

    @Autowired
    ValidadorNivelDeAcessoBusiness validadorNivelDeAcessoBusiness;

    private HashMap<String, Cliente> clientes;
    private new HashMap<String, Date> clientesNaoEncontrados;

    public AcessoCliente() {
        clientes = new HashMap<String, Cliente>();
        clientesNaoEncontrados = new HashMap<String, Date>();
    }

    /*business*/
}

 类似资料:
  • 问题内容: 如何将Spring依赖注入到我编写的扩展AbstractTestExecutionListener的TestExecutionListener类中? Spring DI似乎不适用于TestExecutionListener类。问题示例: AbstractTestExecutionListener: 配置文件: JUnit测试文件: 如代码注释中突出显示的那样,当我运行此代码时,它将打印

  • 我开始开发一个经典的Spring Boot MVC应用程序。我使用依赖注入(使用、注释)没有任何问题。 当我尝试使用依赖注入运行某些集成测试时,我会以相同的方式从JUnit得到以下错误消息: 在包中,我有一个没有注释的接口和一个用注释的类。 我不明白,如果DI可以运行我的应用程序,那么为什么它在测试中不起作用。不知何故,我的注释实现类没有被spring boot发现,就像错误消息所说的那样。 测试

  • 我有基类和,它们有多个实现。但是,每个参数化类型只有一个实现,因此应该能够确定需要哪个子类。 在将第二个参数添加到基类和(从而添加到它们的所有子类)之前,这实际上是有效的。但是在添加了这些之后,下面是Spring初始化期间的错误: UnsatisfiedDependencyException:创建名为“My App”的bean时出错:通过字段“x1”表示的未满足的依赖项;嵌套异常为org.spri

  • 问题内容: 我需要使用spring框架在抽象超类中注入依赖项。 我每次实例化Abstract class B时都需要传递超类依赖关系(可以在我的项目中以100多种方式将其子类化) application.xml(Spring上下文文件)中的条目 我如何才能在application.xml中创建超类AbstractClassB的bean引用,以便可以在所有子类bean创建中使用它? 问题答案: 你可

  • 我使用Spring Boot开发了REST服务。在其中一个REST控制器中,我有一个基于字段的依赖注入,我想将其更改为基于构造函数的依赖注入。我的依赖注入设置目前如下所示: 使用此设置,一切正常。我想将ParameterDateService更改为基于构造函数,我尝试了以下方法: 更改为基于构造函数的依赖注入后,当我尝试像这样注入依赖时,我会得到一个参数数据ervice.post参数日期(参数日期

  • 我遇到了依赖注入周期问题。我请求重新设计建议。提前谢谢。 错误描述:应用程序上下文中某些bean的依赖关系形成一个循环: 这是两个班 第一类: 第二类: