代码之家  ›  专栏  ›  技术社区  ›  Rafael Andrade

使用Spring@Component中的@postcontract初始化数据

  •  0
  • Rafael Andrade  · 技术社区  · 6 年前

    我正在使用注释@postcontract使用spring初始化@Component中的一些数据。

    问题是属性只初始化了一次。@Component中的代码是这样的。

    private int x;
    
    @Inject Repository myRepo;
    
    @PostConstruct
    private void init () {
        this.x = myRepo.findAll().size();
    }
    

    变量“x”将在生成时初始化,如果我的数据库中的数据发生更改,“x”将不会更新。有没有办法在不属于spring的类中注入服务?例如,没有@Component。

    MyClass newclass = new MyClass();
    

    因此,在初始化类时,将始终调用findAll()。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Antoniossss    6 年前

    如果你这样做了

    @Component
    @Scope('prototype') // thats the trick here
    public class MyClass(){
    
    @Autowired Repository myRepo;
    
    @PostConstruct
    private void init () {
        this.x = myRepo.findAll().size();
    }
    }
    

    作用域为的bean实例 prototype 每次由eited CDI上下文请求或直接从工厂请求时都会创建它们。

    或者你也可以

    @Component()
    public class MyClass(){
    
        public MyClass(@Autowired Repository myRepo){
          this.x = myRepo.findAll().size();
        }
    }
    

    在这两种情况下,您都必须使用Spring的CDI来获取MyClass的新实例。