@Autowired在静态类中

这是Hibernate的Spring

MVC项目。我正在尝试制作一个Logger类,该类负责将日志输入数据库。其他类只是调用具有某些属性的适当方法,而该类应该发挥所有魔力。从本质上讲,它应该是带有静态方法的类,但是这会导致自动装配dao对象出现问题。

public class StatisticLogger {

@Autowired

static Dao dao;

public static void AddLoginEvent(LogStatisticBean user){

//TODO code it god damn it

}

public static void AddDocumentEvent(LogStatisticBean user, Document document, DocumentActionFlags actionPerformed){

//TODO code it god damn it

}

public static void addErrorLog(Exception e, String page, HashMap<String, Object> parameters){

ExceptionLogBean elb=new ExceptionLogBean();

elb.setStuntDescription(e);

elb.setSourcePage(page);

elb.setParameters(parameters);

if(dao!=null){ //BUT DAO IS NULL

dao.saveOrUpdateEntity(elb);

}

}

如何使它正确?我不应该使dao对象为空吗?我知道我可以将其作为方法参数传递,但这不是很好。我猜想自动装配不能在静态对象上使用,因为它们尚未创建到自动装配机制的早期。

回答:

您不能@Autowired是静态字段。但是有一个棘手的技巧可以解决这个问题:

@Component

public class StatisticLogger {

private static Dao dao;

@Autowired

private Dao dao0;

@PostConstruct

private void initStaticDao () {

dao = this.dao0;

}

}

一句话,就是@Autowired一个实例字段,并在构造对象时将值分配给静态字段。顺便说一句,该StatisticLogger对象也必须由Spring管理。

以上是 @Autowired在静态类中 的全部内容, 来源链接: utcz.com/qa/418365.html

回到顶部