游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

GraalVM实践image与springnative

  nativeimage
  GraalVM是从main方法开始分析,所有可达的类和方法会被记录。
  但是反射、动态代理、资源文件等无法通过简单的静态分析捕获,为了支持这部分代码的行为,GraalVM支持配置文件来支持JIT时常用的做法。
  GraalVM推荐在METAINFnativeimage(或子文件夹,如为避免不同jar下的配置冲突,放在METAINFnativeimage{groupId}{artifactId})下的nativeimage。properties来形成构建本地代码所需要的命令行参数。nativeimages。properties一般包含哪些类可以在构建时初始化(initializeatbuildtime),哪些只能运行时初始化(initializeatruntime)。
  有被JDK动态代理的接口,可以记录到proxyconfig。json,比如MyBatis的SqlSession,Spring的Component等注解。
  有JNI调用的类,可以记录到jniconfig。json,比如sun。instrument。InstrumentationImpl。
  有要被反射调用的,可以记录到reflectconfig。json,比如我们的Mapper要被MyBatis代理,要求Mapper接口的方法可以被反射查询到,参数和返回要被反射调用gettersetter来取值设置值。
  有资源文件,可以记录到resourceconfig。json,比如messages。properties这种国际化资源、application。proeprties这种应用配置以及MyBatis的Mapper文件等等。
  还有序列化相关的,可以记录到serializationconfig。json。
  这些配置文件可以通过GraalVM提供的nativeimageagent来自动生成绝大部分内容:agentlib:nativeimageagentconfigoutputdirpathfile
  然而,nativeimage。properties却不会自动生成,需要我们手动添加。如果不想使用默认的配置文件名,可以在修改文件名后(比如proxyconfig。json改成proxy。json,甚至放在子文件夹下),使用参数告知graalvm。nativeimage。properties示例如下:Argsallowincompleteclasspathinitializeatbuildtimeorg。slf4j。Logger,org。slf4j。LoggerFactory,org。slf4j。MDCJaddexportsjava。managementsun。managementALLUNNAMEDH:DynamicProxyConfigurationResources{。}proxy。jsonH:ReflectionConfigurationResources{。}reflect。jsonH:ResourceConfigurationResources{。}resource。jsonDsys。propspringnative
  那么springnative给我们带来了哪些便利呢?
  springnative提供了诸多注解,帮助我们生成GraalVM所规范的配置。
  比如InitializationHint注解可以生成nativeimage。properties里的initializeatbuildtime、initializeatruntime。
  比如JdkProxyHint注解可以生成proxyconfig。json的内容。
  比如ResourceHint注解可以生成resourceconfig。json内容。
  比如SerializationHint注解生成serializationconfig。json需要的序列化反序列化内容。
  比如TypeHint注解(明细配置可结合FieldHint和MethodHint)生成reflectconfig。json需要的哪些字段方法可被反射调用。
  介绍过开胃菜,接下来就是正式的大餐:IoC和AOP。
  我们知道spring提供了xml、java代码、java注解等多种配置方式,帮助我们生成bean对象、查找并注入依赖、增强bean。而springboot提供了自动配置,开启约定大于配置,让我们无需在每次新建系统时重复配置。
  springnative针对这些功能,结合GraalVM的特点,为我们生成代码,来接好springspringboot的岗位。springnative会自动为每个存在依赖注入的包生成ContextBootstrapInitializer类,为每个类生成register前缀与类名组合的方法。方法内容大致可表示如下:publicfinalclassContextBootstrapInitializer{publicstaticvoidregister{klazz。simpleName}(DefaultListableBeanFactorybeanFactory){BeanDefinitionRegistrar。of({beanName},{klazz。simpleName}。class)。instanceSupplier((instanceContext){{klazz。simpleName}beannew{klazz。simpleName}();instanceContext。field({field。name},{field。class。simpleName}。class)。invoke(beanFactory,(attributes){Field{field。name}FieldReflectionUtils。findField({klazz。simpleName}。class,{field。name},{field。class。simpleName}。class);ReflectionUtils。makeAccessible({field。name}Field);ReflectionUtils。setField({field。name}Field,bean,attributes。get(0));});})}}
  对于springboot的autoconfiguration,在满足条件时,同样生成ContextBootstrapInitializer。对于各个jar包下的spring。factories文件,在org。springframework。aot下生成StaticSpringFactories,将类型和生成对象方式保存,以供后续使用。
  在org。springframework。aot包下还生成了ContextBootstrapInitializer,与应用定义bean的不同之处在于,此类实现了ApplicationContextInitializer。
  在SpringApplication构造时,通过生成的SpringFactoriesLoader加载类型及对应的对象(非AOT模式为加载spring。factories,AOT模式为StaticSpringFactories),引起初始化,大致代码如下:publicclassContextBootstrapInitializerimplementsApplicationContextInitializerGenericApplicationContext{privateImportAwareBeanPostProcessorcreateImportAwareBeanPostProcessor(){MapString,StringmappingsnewLinkedHashMap();mappings。put(org。springframework。transaction。annotation。ProxyTransactionManagementConfiguration,ml。iamwhatiam。baostock。Application);mappings。put(org。springframework。cache。annotation。ProxyCachingConfiguration,ml。iamwhatiam。baostock。Application);returnnewImportAwareBeanPostProcessor(mappings);}Overridepublicvoidinitialize(GenericApplicationContextcontext){infrastructureDefaultListableBeanFactorybeanFactorycontext。getDefaultListableBeanFactory();beanFactory。setAutowireCandidateResolver(newContextAnnotationAutowireCandidateResolver());beanFactory。addBeanPostProcessor(createImportAwareBeanPostProcessor());BeanDefinitionRegistrar。of({mainClass。name},{mainClass。simpleName}。class)。instanceSupplier({mainClass。simpleName}::new)。register(beanFactory);{groupId}。{artifactId}。ContextBootstrapInitializer。register{klazz。simpleName}(beanFactory);BeanDefinitionRegistrar。of(org。springframework。boot。context。properties。ConfigurationPropertiesBindingPostProcessor,ConfigurationPropertiesBindingPostProcessor。class)。instanceSupplier(ConfigurationPropertiesBindingPostProcessor::new)。customize((bd)bd。setRole(2))。register(beanFactory);otherEnableAutoConfigurationbeanorg。springframework。boot。autoconfigure。cache。ContextBootstrapInitializer。registerSimpleCacheConfiguration(beanFactory);}}
  当然,并非所有的自动配置类其类型都是公开的(classXXAutoconfiguration,而不是publicclassXXAutoConfiguration),对于这种情况,springnative为他们在同包名下生成FactoryProvider类,该静态方法名为类型名,返回该类型。
  还有些bean的类型,其构造函数是私有的,springnative为其生成内部类来创建实例。
  至此,当springboot的SpringApplication运行时,创建完DefaultBootstrapContext便由org。springframework。aot下的ContextBootstrapInitializer进行初始化,此时便会将各种bean及其生成方式注册到spring的上下文。

庞大词语造句庞大拼音【注音】:pangda庞大解释【意思】:极大(常含过大或大而无当的意思,指形体、组织或数量等):开支机构。庞大造句庞大造句:1、他用……转动的造句1。过去的人们一直认为太阳绕地球转动,其实大谬不然。2。风姿妩媚动人,体态袅娜可爱,谈吐文雅不凡,容貌闭月羞花,声音婉转动听,笑容灿若莲花,举止大方得体,见你一面至少想你……用矗立造句大全导语:踏进校门的那一步我彻底失望了,放眼望去,像刚从废墟的战场中得到轮回。只有斩新的矗立拔起的教学楼引人入目外,其余的一片狼籍!以下是小编为大家分享的用矗立造句大全,欢迎借鉴!……饿了么今起平台猝死保障额提升至60万元IT之家1月8日消息今晚,饿了么发布公告,向意外身故的蓝骑士致哀,宣布将众包骑士的保险金额将提至60万元。本次事件中的60万元抚恤金将在本周内交付骑士家属。饿了么表示,目……黄河的主人优秀说课稿一、教材分析《黄河的主人》是苏教版小学语文第九册的一篇课文。它是一篇意蕴深刻、震撼人心的优美散文。这篇散文描写了波浪汹涌的黄河及河上羊皮筏子的艄公驾驭黄河的风采,赞……饿了么骑手送餐撞伤人,法院一审判决公司赔偿27万IT之家12月22日消息北京市高级人民法院通过其官方微信公众号京法网事通报,据朝阳法院消息,过马路时被骑电动车的饿了么骑手撞成十级伤残,于先生将骑手杜某、拉扎斯网络科技(上海)……爱奇艺CEO我们这个行业就没夏天龚宇从舞台右侧大步走出,站定在话筒前,脸上带着一贯从容的微笑。作为创始人兼CEO,爱奇艺尖叫之夜应该是他的绝对主场。但当晚龚宇只作为给明星当陪衬的颁奖嘉宾出现,除了开场的……爱奇艺CEO95后00后普遍以看盗版内容为耻IT之家12月5日消息知识产权,也称其为知识所属权,指权利人对其智力劳动所创作的成果享有的财产权利,一般只在有限时间内有效。知识产权是关于人类在社会实践中创造的智力劳动成果的专……格力发布10000mAh移动电源支持18W双向快充,售价12IT之家1月23日消息据媒体报道,格力近日推出了一款移动电源产品,该移动电源售价为128元,已经上架开售(IT之家查询格力商城暂未发现该产品)。该移动电源主打纤薄和快充,……个税抵扣细则来了!子女教育大病医疗房贷赡养老人等6大扣除这样相关阅读:《(收藏)官方划重点!多图看懂个税专项附加扣除怎么扣》IT之家12月22日消息本周国家税务总局就全面实施新个人所得税法后工资、薪金所得,劳务报酬所得,稿酬所得,……(转发收藏)官方划重点!多图看懂个税专项附加扣除怎么扣IT之家12月22日消息国务院日前印发《个人所得税专项附加扣除暂行办法》(以下简称《办法》),自2019年1月1日起施行。《办法》指出,个人所得税专项附加扣除,是指个人所得税法……布娃娃的说课稿一、说幼儿:1、大班幼儿的年龄特点:探究、分析、观察能力有了一定的发展,能主动地去探究周围和环境的变化。无意记忆较多,较少进行有目的有意识的记忆。能根据自己的……
一年级月亮的心愿教学反思范文《月亮的心愿》是义务教育课程标准实验教科书语文一年级下册第二单元的一课。本单元的课文教育思想以宏扬尊敬长辈、孝敬父母为主。本篇课文是一篇优美动人的童话故事。本节课在教学方……国庆假期乘车更易遗失物品?官方详解使用滴滴出行时处理办法IT之家10月5日消息据2018年数据显示,十一小长假期间,寻找遗失物品的乘客较平常增加约40。今日,滴滴出行官方提醒乘客,下车时应带好手机、钱包以及后备箱的行李。此外,……滴滴国庆假期预计最高日订单3700万,将投1。7亿司机补贴平IT之家9月27日消息今日,滴滴出行发布十一长假平台数据,数据显示2018年国庆期间日均发单量近3000万单,其中9月30日发单量最高;平台预测2019年9月30日全国发单量将……魔幻的颜色小学三年级美术教学反思本课主要让学生认识三原色,懂得颜色在我们生活中的重要性。在教学过程中,为了激发学生的学习兴趣和一些色彩理论知识,我用课题课题《魔幻的颜色》中的魔幻二字来做文章,设计了一个……60斤重!老伯欲带184台翻新手机出境IT之家8月5日消息据看看新闻报道,7月25日,一名老伯携带184台手机出境,被罗湖海关关员查获。报道称,当天这名老人背着一个黑色背包,拖着一个行李箱,经罗湖口岸出境。X……马化腾网民数量已无太多红利,互联网民进入下一阶段IT之家3月21日消息今日,腾讯公布了2018年度第四季度及全年财报。报告显示,腾讯Q4营收848。96亿元,同比增长28,市场预期为833。8亿元;净利润142。29亿元,同……琅嬛福地记阅读答案琅嬛福地记(明)张岱晋太康中,张茂先为建安从事,游于洞山。缘溪深入,有老人枕书石上卧,茂先坐与论说。视其所枕书,皆蝌蚪文,莫能辨,茂先异之。老人问茂先曰:君读书几何……高二英语FirstampnbspAid教案unit5firstaidi。单元教学目标技能目标goalstalkaboutfirstaidandmedicinepracticeexpressinggivinginstru……奥斯卡颁奖在即,谷歌用Pixel3HomeHub过了一把大片IT之家2月24日消息第91届奥斯卡金像奖颁奖典礼将于北京时间明天(25日)早上进行,在这一全球瞩目的盛会前夕,谷歌发布了一个新的混剪广告,用Pixel3XL、GoogleHo……全国实现303个地级以上城市交通一卡通互联互通(附最新城市列IT之家1月7日消息根据交通联合官方服务号微信公众号的消息,截至2020年12月底,全国已实现303个地级以上城市交通一卡通互联互通。图自交通联合官方服务号微信公众号……北京交通委网约车驾驶员确诊新冠将对平台从重处罚公开曝光IT之家1月4日消息1月4日下午,在北京市新型冠状病毒肺炎疫情防控工作第201场新闻发布会上,北京市交通委员会副主任王兆荣介绍,对网约车平台公司、巡游出租车企业和道路客运企业、……游戏原神中的璃月为什么是清朝民国风不是汉唐风?原神是一款具备手机平台功能的游戏,它必须为自己留下更大的空间冗余。这个游戏注定会越做越大,它所占据的手机存储空间也会越来越大,关于这点玩过崩3的应该都有体会。所以,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网