<bean id="loggerPostProcessor" class="com.zz.csp.common.processor.LoggerPostProcessor"/>
@Controller @RequestMapping public class IndexController extends BaseController { @Log public Logger logger; @RequestMapping("index") public String index() { //这里会报空指针异常 logger.info("aaaaaaaaa"); return "login"; } }
/** * 自定义的日志注解 */ @Component @Documented @Target({ElementType.FIELD,ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Log {}
public class LoggerPostProcessor implements BeanPostProcessor{ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { ReflectionUtils.doWithFields(bean.getClass(), field -> { ReflectionUtils.makeAccessible(field); if (field.getAnnotation(Log.class) != null) { Logger logger = LoggerFactory.getLogger(bean.getClass()); field.set(bean, logger); } }); return bean; } @Override public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException { return bean; } }