这是一个Hibernate的Spring MVC项目。 我试图创建一个Logger类,负责将日志输入到数据库中。 其他类只是调用具有某些属性的适当方法,而这个类应该做所有的魔术。 本质上它应该是一个带有静态方法的类,但是会导致autowiering dao对象出现问题。@ututowired静态类
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对象为null? 我知道我可以将它作为方法参数传递,但这不是很好。 我猜autowired无法在静态对象上工作,因为它们被创建为早期自动创建机制还没有创建。
有趣招。我将在未来中记住这一点:) – 2014-03-23 14:39:57
该方法的返回类型必须是无效的。 http://docs.oracle.com/javaee/5/api/javax/annotation/PostConstruct.html – 2014-06-12 11:44:52
在战斗结束后不久,我就开始使用这个解决方案,这个解决方案大部分工作。但是Sonar公司很快给了我一个警告:“从非静态方法正确更新静态字段很难正确使用,如果有多个类实例和/或多个线程在场,很容易导致错误。理想情况下,静态字段只能从同步静态方法更新。“我认为值得一提。 – MaxouMask 2017-01-19 09:42:26