#java #spring
Пытаюсь освоить Spring. Делаю все по видео Spring Потрошитель, но на экран ничего не выходит. Вроде бин класса InjectRandomIntAnnotationBeanPostProcessor просто игнорируется. Просьба подсказать в чем проблема? Сам бин: public class TerminatorQuoter implements Quoter { private String message; @InjectRandomInt(min = 2, max = 7) private int repeat; public void setMessage(String message) { this.message = message; } public void sayQuote() { for (int i = 0; i < repeat; i++) { System.out.println("message = s" + message); } } Аннотация: @Retention(RetentionPolicy.RUNTIME) public @interface InjectRandomInt { int min(); int max(); } BeanPostProcessor: public class InjectRandomIntAnnotationBeanPostProcessor implements BeanPostProcessor { public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { Field[] fields = bean.getClass().getFields(); for (Field field : fields) { InjectRandomInt injectRandomInt = field.getAnnotation(InjectRandomInt.class); if (injectRandomInt != null){ int min = injectRandomInt.min(); int max = injectRandomInt.max(); Random random = new Random(); int randomInt = min + random.nextInt(max - min); field.setAccessible(true); ReflectionUtils.setField(field, bean, randomInt); } } return bean; } public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } XML:Main.java (собственно откуда текст и не выходит): public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("context.xml"); context.getBean(TerminatorQuoter.class).sayQuote(); }
Ответы
Ответ 1
Вызов bean.getClass().getFields(); возвращает лишь public поля. Замените этот вызов на bean.getClass().getDeclaredFields();.
Комментариев нет:
Отправить комментарий