BeanDefinitionRegistryPostProcessor的实现类中注入不了类 原创 2022-02-15 10:52:46.0 阅读(1805)次 最近在用BeanDefinitionRegistryPostProcessor实现接口生成动态代理的功能,BeanDefinitionRegistryPostProcessor的实现类中想取的配置类,但发现一直取不到springboot中的配置。 配置类代码如下: ```java @Data @Component @ConfigurationProperties("my.netty.feign") public class NettyFeignConfig { /** * netty feign扫瞄的目录 */ private String pack; /** * netty feign调用的超时时间,默认30秒 */ private Integer timeout; } ``` NettyFeignConfig对应的配置如下: ```yaml my: netty: feign: timeout: 40 pack: com.my ``` 然后在BeanDefinitionRegistryPostProcessor的实现类中注入上面的类NettyFeignConfig,代码如下: ```java @Component public class NettyFeignClientProxyBeanRegistry implements BeanDefinitionRegistryPostProcessor { private static final Logger logger = LoggerFactory.getLogger(NettyFeignClientProxyBeanRegistry.class); @Resource private NettyFeignConfig nettyFeignConfig; @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException { //定义NettyFeignClient扫描器 NettyFeignClientBeanDefinitionScanner scanner = new NettyFeignClientBeanDefinitionScanner(beanDefinitionRegistry, false,applicationContext); scanner.scan(nettyFeignConfig.getPack()); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } } ``` 结果调试时发现nettyFeignConfig注入后取不到application.yml中的my.netty.feign配置,如下图:  查了下资料才发现BeanDefinitionRegistryPostProcessor的实现类中不能注入其他类的实例,否则会过早的实例化这些注入的bean,导致实例化这些类不能正常使用。具体原理可以看我下一篇文章:[http://www.classinstance.cn/detail/179.html](http://www.classinstance.cn/detail/179.html "http://www.classinstance.cn/detail/179.html") 那问题很明了了,我要解决BeanDefinitionRegistryPostProcessor的实现类中注入不了配置类,就只能实现EnvironmentAware接口,再用Environment来取配置了。代码如下: ```java @Component public class NettyFeignClientProxyBeanRegistry implements BeanDefinitionRegistryPostProcessor ,ApplicationContextAware,EnvironmentAware { private static final Logger logger = LoggerFactory.getLogger(NettyFeignClientProxyBeanRegistry.class); private Environment environment; private ApplicationContext applicationContext; @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException { //定义NettyFeignClient扫描器 NettyFeignClientBeanDefinitionScanner scanner = new NettyFeignClientBeanDefinitionScanner(beanDefinitionRegistry, false,applicationContext); //scanner.setResourceLoader(resourceLoader); //scanner.registerFilters(); scanner.scan(environment.getProperty("my.netty.feign.pack"));//com.tianlong } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Override public void setEnvironment(Environment environment) { this.environment = environment; } } ``` spring 上一篇:Clickhouse批量删除分区 下一篇:BeanDefinitionRegistryPostProcessor作用及加载顺序
相关文章 BeanDefinitionRegistryPostProcessor作用及加载顺序(1568) spring boot项目默认日志配置(1017) spring boot多module项目导入Eclipse(2265) Spring boot跨域配置(1923) the dependencies of some of the beans in the application context form a cycle(16344) 获取eureka的注册服务的实例列表(1694) spring事务管理与查询是否需要事务以及可重复读的问题(3469) Spring boot项目引入jar包时启动报错:java.lang.StackOverflowError(4566) 使用spring4实现websocket连接(3086) redis报错远程主机强迫关闭了一个现有的连接以及超时问题(16314) 推荐文章 使用spring4实现websocket连接(1) Parameter index out of range (1 > number of parameters, which is 0(7) spring cloud+feign+mybatis中使用seata0.9实现分布式事务(7) spring cloud gateway报错Only one connection receive subscriber allowed(82) spring cloud中Feign调用诡异报错MethodNotAllowed: status 405 reading(116) elasticsearch7.1保存时报错: Validation Failed: 1: type is missing;(7) 聊聊数据保存到MySQL后数据乱码的问题(1) jquery对象与dom对象互转(1) linux使用epel源yum安装iftop、nload、nginx等(2) linux下nginx安装其他模块(1) 热门文章 java stream去重的几种方式(40819) the dependencies of some of the beans in the application context form a cycle(16324) 解决mybatis打印查询结果集造成太多日志的问题(9839) java enum枚举转list和Map(9722) java stream List转Map与List转List与Map转List以及List转Map(8468) ServletRequest转HttpServletRequest设置header之后取不到header的问题(8434) java中BufferedImage转成 base64字符串(8098) 切分List集合为多个List集合(7385) maven修改jar包版本不生效解决办法(6990) bootstrap.yml配置报错:Could not resolve placeholder 'xx' in value (6949) 标签列表 java java java基础 java基础 微服务 异常处理 mysql spring boot spring cloud clickhouse clickhouse clickhouse clickhouse linux elasticsearch feign jdbc js spring postgresql docker 格子衫 程序员 seata solr nginx 程序员 格子衫 maven gateway hsqldb 数据库 架构 大数据分析 分布式事务 canal redis dubbo 消息队列 win10 websocket springmvc git hadoop mybatis jenkins quartz rocketmq select2 html 阿里云 设计模式 笔记 eclipse freemarker 电脑 bat 格子衫 ajax 数据库集群 activemq jvm jquery javamail hystrix redission redission对象 http hibernate springmail svn ubuntu ueditor xheditor zookeeper 分布式 小程序 开发工具 gitlab github