Spring 之 BeanPostProcessor

深碍√TFBOYSˉ_ 2022-04-18 00:52 270阅读 0赞

将实现了BeanPostProcessor接口的类定义为bean,将拥有预处理和后处理bean的能力。

Example:

  1. public class ThymeleafSecurityDialectProcessor implements BeanPostProcessor {
  2. private static final Logger logger = LoggerFactory.getLogger(ThymeleafSecurityDialectProcessor.class);
  3. private static boolean needAddDialect = false;
  4. static {
  5. boolean springTemplatePresent = ClassUtils.isPresent("org.thymeleaf.spring4.SpringTemplateEngine", ThymeleafSecurityDialectProcessor.class.getClassLoader());
  6. boolean springTemplateInterfacePresent = ClassUtils.isPresent("org.thymeleaf.templateresolver.ITemplateResolver", ThymeleafSecurityDialectProcessor.class.getClassLoader());
  7. needAddDialect = springTemplateInterfacePresent && springTemplatePresent;
  8. }
  9. @Override
  10. public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
  11. return o;
  12. }
  13. @Override
  14. public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
  15. if(needAddDialect && o instanceof SpringTemplateEngine){
  16. SpringTemplateEngine engine = (SpringTemplateEngine)o;
  17. boolean exist = engine.getDialects().stream()
  18. .anyMatch(it->it instanceof SpringSecurityDialect);
  19. if(!exist){
  20. logger.info("add SpringSecurityDialect for {}", engine.toString());
  21. engine.addDialect(new SpringSecurityDialect());
  22. }else{
  23. logger.info("SpringSecurityDialect already exist for {}", engine.toString());
  24. }
  25. }
  26. return o;
  27. }
  28. }

这里演示了对bean进行了后处理。

发表评论

表情:
评论列表 (有 0 条评论,270人围观)

还没有评论,来说两句吧...

相关阅读