Ошибки округления с плавающей запятой. 0,1 не могут быть представлены точно в базе-2, как в базе-10, из-за недостающего простого коэффициента 5. Так же, как 1/3 принимает бесконечное число цифр для представления в десятичной форме, но составляет «0,1» в базе-3, 0.1 принимает бесконечное число цифр в базе-2, где оно не находится в базе-10. И компьютеры не имеют бесконечного объема памяти.
Вы не можете @Autowired
статическое поле. Но с этим сложно справиться:
@Component
public class StatisticLogger {
private static Dao dao;
@Autowired
private Dao dao0;
@PostConstruct
private void initStaticDao () {
dao = this.dao0;
}
}
В одном слове @Autowired
поле экземпляра и присваивать значение статическому файлу, когда вы строите свой объект. BTW, объект StatisticLogger
должен управляться также Spring.
Я знаю, что это старый вопрос, но просто хотел поделиться тем, что я сделал, решение @Weibo Li в порядке, но проблема в том, что он поднимает критическое предупреждение сонара о назначении нестатической переменной статической переменной
способ, которым я разрешил его без предупреждений сонара, следующий
public static StatisticLogger getInstance() {
if (instance == null) {
instance = new StatisticLogger();
}
return instance;
}
protected StatisticLogger() {
}
public void setDao(Dao dao) {
this.dao = dao;
}
public void AddLoginEvent(LogStatisticBean user){
//TODO code it god damn it
}
public void AddDocumentEvent(LogStatisticBean user, Document document, DocumentActionFlags actionPerformed){
//TODO code it god damn it
}
public 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){
dao.saveOrUpdateEntity(elb);
}
} @Autowired
private Dao dao0;
@PostConstruct
private void setDaoValue () {
StatisticLogger.getInstance().setDao(dao0);
}
} Классическое автоустройство, вероятно, не будет работать, потому что статический класс не является Bean и, следовательно, не может управляться Spring. Есть способы обойти это, например, используя aproach в или загружая компоненты из контекста Spring в статическом блоке инициализатора, но я бы предложил изменить design:
Не используйте статические методы, используйте службы, которые вы вводите там, где они вам нужны. Если вы используете Spring, вы можете использовать его правильно. Инъекция зависимостей - это объектно-ориентированная техника, и это имеет смысл, если вы действительно используете ООП.