@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
是静态字段。但是有一个棘手的技巧可以解决这个问题:
@Componentpublic 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