防备儿童近视要注意这三个问题

About:供给IDE版别ID示例运用为了协助用户快速运用,防备IDE为不同的算法类别供给了一些运用示例。
这儿的解决计划也比较简单:儿童相同根据事情监听,儿童Spring容器毁掉会有ContextClosedEvent事情,在WebLoaderListener中监听该事情,然后调用AbstractApplicationContext#close办法就能够完结Spring容器的毁掉作业。作者:近视京东科技李君书接上文,近视前面在Spring使用兼并之路(一):摸石头过河介绍了几种不成功的阅历,下面继续折腾…四、库房兼并,独立容器在阅历了上面的测验,在搭档为啥不搞两个独立的容器提示下,决议抛开SpringBoot内置的父子容器计划,彻底自己完成父子容器。
可是,要注意调查日志,要注意会发现com.diguage.demo.boot.config.WebLoaderListener#onApplicationEvent办法被两次履行,也便是监听到了两次ContextRefreshedEvent事情,导致web容器会被加载两次。if(this.parent!=null){if(this.parentinstanceofAbstractApplicationContextabstractApplicationContext){abstractApplicationContext.publishEvent(event,typeHint);}else{this.parent.publishEvent(event);}}}在publishEvent办法的最终,问题假如父容器不为null的情况下,问题则也会向父容器播送容器的相关事情。因为SpringBean默许是单例的,防备并且会随同Spring容器长时间存活,就能够确保web容器耐久存活。
结合Spring扩展点概览及实践中介绍的Spring扩展点,儿童有两个当地能够使用:儿童1.能够使用ApplicationContextAware获取boot容器的ApplicationContext实例,这样就能够完成自己完成的父子容器在获取到详细的库名后履行getRequiredSqlWithSpecificDBName办法来将其拼接到表名前,近视在这里咱们运用到了JSqlParser的东西类,近视解析出来一切的表名,履行字符串的替换,最终一步同样是运用反射操作将该参数值再写回去,这样便完成了指定库名的使命。
接下来咱们需求看下笼统阻拦器中供阻拦器复用的办法,要注意如下:要注意publicabstractclassAbstractDBNameInterceptor{/***SqlSource字段称号*/privatestaticfinalStringSQL_SOURCE_FIELD_NAME=sqlSource;/***履行修正数据库名的逻辑*/protectedObjectupdateDBName(Invocationinvocation)throwsThrowable{//装修器装修SqlSourcedecorateSqlSource((MappedStatement)invocation.getArgs()[0]);returninvocation.proceed();}/***装修SqlSource*/privatevoiddecorateSqlSource(MappedStatementstatement)throwsNoSuchFieldException,IllegalAccessException{if(!(statement.getSqlSource()instanceofSqlSourceDecorator)){FieldsqlSource=statement.getClass().getDeclaredField(SQL_SOURCE_FIELD_NAME);sqlSource.setAccessible(true);sqlSource.set(statement,newSqlSourceDecorator(statement.getSqlSource()));}}}这个仍是比较简单的,仅仅凭借反射机制做了一层装修,查询阻拦器完成如下:@Intercepts({@Signature(type=Executor.class,method=query,args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class}),@Signature(type=Executor.class,method=query,args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class,CacheKey.class,BoundSql.class})})publicclassSelectDBNameInterceptorextendsAbstractDBNameInterceptorimplementsInterceptor{@OverridepublicObjectintercept(Invocationinvocation)throwsThrowable{returnupdateDBName(invocation);}}将其装备到Mybatis阻拦器中,便能完成数据库动态切换了。
结合注释咱们解释一下SqlSourceDecorator的逻辑,问题其间用到了Java反射相关的操作。据我国文物沟通中心此前发布的音讯,防备此次两个叙利亚主题文物展览,防备系由原有的195件组叙利亚文物拆分而来,是我国文物沟通中心为扩展展览影响力、满意博物馆个性化展览需求,让更多观众可以近距离欣赏到叙利亚文明之美的立异行动。
不过,儿童12月11日,秦始皇帝陵博物院工作人员告知红星新闻记者,该展览暂时还未展出,也没有相关信息发布。比照清单后发现,近视这些文物也正是本年5月时分别在南京和南宁开端展出的叙利亚文物
韩东勋表明,要注意应该严峻处分包含总统在内的参加戒严事情的人,尹锡悦应该当即免除包含戎行统帅权等国政运营权。尹锡悦否定紧迫戒严是内争,问题再次批判在野党威胁国会,乱用弹劾公职人员权利。
最新评论