java - 如何使构造函数在 Autowiring 后调用?

标签 java spring spring-boot spring-bean

我正在构造函数中初始化需要 Autowiring 参数的加载缓存。但由于 spring bean 的顺序,我无法得到正确的结果。所以创建userLdapGroupsCache时没有设置超时和大小。你们有什么建议来解决这个问题吗?谢谢。

  private LoadingCache<String, Set<String>> userLdapGroupsCache;

  @Autowired
  @Qualifier("cacheExpireTime")
  private int cacheExpireTime;

  @Autowired
  @Qualifier("cacheMaxSize")
  private int cacheMaxSize;

 public LdapAuthorization ()
  {
    userLdapGroupsCache = 
    CacheBuilder.newBuilder()
     .maximumSize(cacheMaxSize)
     .expireAfterWrite(cacheExpireTime, TimeUnit.MINUTES)
     .build(new CacheLoader<String, Set<String>>() {
              @Override
              public Set<String> load(String key) throws Exception {
                return getGroups(key);
              }
            });
  }

最佳答案

您必须将该对象的初始化放在用@PostConstruct注释的方法中:

  @PostConstruct
  public void init()
  {
    userLdapGroupsCache = 
    CacheBuilder.newBuilder()
     .maximumSize(cacheMaxSize)
     .expireAfterWrite(cacheExpireTime, TimeUnit.MINUTES)
     ...
  }

感谢它会使用注入(inject)的参数进行初始化,因为在所有字段都注入(inject)到 bean 中之后调用使用 @PostConstruct 注释的方法。

关于java - 如何使构造函数在 Autowiring 后调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57332121/

相关文章:

Spring security Ldap 从编码的 cookie 中获取用户名密码以进行身份​​验证

java - 我想在 ping 主机后获取 ping 执行时间和结果字符串

java - 有人可以给我关于如何正确签名 java 小程序的分步说明吗

java - LazyList.decorate - 实例化工厂 : The constructor must exist and be public exception

java - Spring MVC 中 @RequestMapping() 的正则表达式

java - 使用 Micrometer 指标运行 SpringBoot 2 应用程序时出错

java - 如何在Ubuntu操作系统中的eclipse中运行windows中的spring boot应用程序?

tomcat - 使用独立 Tomcat 的 Spring Boot 容器身份验证

java - JNI 函数导致 Android 应用程序崩溃

java - 在后台透明地使用 Grizzly?