【问题标题】:Spring Autowire a Static Interface class [duplicate]Spring Autowire一个静态接口类[重复]
【发布时间】:2014-03-18 01:42:21
【问题描述】:

如何自动装配静态接口类

这是我的代码

@Autowired
private static IAuditLogRepository iAuditLogRepository;

public static int saveLog(LogFile logFile){
iAuditLogRepository.saveLog(logFile);  // Autowireing fails and iAuditLogRepository is null.
}

我的接口类

public interface IAuditLogRepository {
    public Serializable saveLog(LogFile logFile);
}

如何自动装配接口?

我已经调查过this。我怎样才能对接口类做同样的事情。

【问题讨论】:

  • 为什么它必须是静态的?让它成为非静态的并继续前进。
  • 它是一种日志机制,甚至在任何人登录之前都会运行。它与许多功能如 cron 作业等相关联!!
  • 是的,我目前所做的一切都是为了让它保持良好的状态。但是不能将其更改为在很多地方使用的非静态的。!!一旦我们完成当前的修改,将考虑您的建议。
  • @duffymo 自动装配一个静态类是好的,但它是一个接口..!!这就是我问的原因..!!它不是重复的......我自己在问题中提供了一个类似的链接。
  • @duffymo 你能解释一下这是怎么变成重复的......!!

标签: java spring static autowired


【解决方案1】:

您不能@Autowired 静态字段。但是有一个棘手的技巧来处理这个:

public class Foo {

private static IAuditLogRepository iAuditLogRepository;

@Autowired
private IAuditLogRepository iaRepos;

@PostConstruct
public void someFunction () {
iAuditLogRepository = iaRepos;
}


public static int saveLog(LogFile logFile){
iAuditLogRepository.saveLog(logFile); 
}


}

一句话,@Autowired 一个实例字段,并在构造对象时将值分配给静态字段。

【讨论】:

  • 现在会尝试联系你..!!
  • 不可能我在构造函数和后期构造上都试过了
  • !!抱歉,它在 postConstruct 上运行良好,谢谢老兄 ;-)
  • 您确定实例字段是自动装配的吗?顺便说一句,Foo 对象也必须由 Spring 管理。 @Dileep
  • 好的,腺体来帮忙。 @Dileep
【解决方案2】:

由于我不允许使用 cmets,我将发布答案: 在这里使用单例而不是静态方法。

【讨论】:

  • 稍后会考虑使用另一个选项,但现在我需要修复而不是替代。
  • 我不知道如何解决它,让它保持静止。对不起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 2021-07-22
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多