2014-02-18 66 views
0

我怎么能自动装配的静态接口类春天的Autowire静态接口类

这是我的代码

@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。我怎么能为接口类做同样的事情。

+1

为什么它必须是静态的?使其非静态并继续前进。 – duffymo

+0

它的日志记录机制甚至可以在任何人登录之前运行,它与许多功能如cron job等相关联! – Dileep

+0

是的,我目前正在努力的一切都是为了让它保持良好状态。但不能改变它在很多地方使用的非静态的。一旦我们完成了当前的修改,将会考虑您的建议。 – Dileep

回答

3

你不能@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实例字段,并赋值给静态当你的对象被创建申请。

+0

将尝试,并得到你现在.. !! – Dileep

+0

不可能我在构造函数和帖子构造上都尝试过 – Dileep

+0

!!对不起,它在'postConstruct' Thanks Dude;上工作正常 – Dileep

0

由于我不允许评论,我会发布回答: 在这里使用单身而不是静态方法。

+0

使用其他选项将在稍后考虑,但现在我需要修复而不是替代方案。 – Dileep

+0

我不知道如何解决它保持静态。抱歉。 – frenchfrie