亿万枭宠:宋医生,别来无恙

 人参与 | 时间:2025-03-05 02:31:48

当电动汽车在该体系内充电时,亿万若可再生动力发电缺乏,亿万ESS电池能够作为弥补电源为EV电池充电,进步动力的运用功率和供电可靠性,完成分布式动力的优化装备和高效运用。

首要,枭宠假如咱们想运用这个组件就需求先启用缓存注解,办法与aop功用相相似,aop也会加载internalAutoProxyCreator后置处理器。//redis缓存管理器publicclassRedisCacheManagerextendsAbstractTransactionSupportingCacheManager{privateCollectioncaches;publicvoidsetCaches(Listcaches){this.caches=caches;}OverrideprotectedCollectionloadCaches(){if(caches==null){returnCollections.emptyList();}returncaches;}OverridepublicCachegetCache(Stringname){Cachecache=super.getCache(name);if(cache==null&&(cache=super.getCache(DEFAULT))==null){thrownewNullPointerException();}returncache;}}下面经过bean的办法注入cacheManager管理器,宋医生其间MyCache需求完成org.springframework.cache.Cache中界说的办法,宋医生以抵达手动diy缓存操作的意图。

亿万枭宠:宋医生,别来无恙

实践上是署理到CacheInterceptor上面,无恙CacheInterceptor中间商内部再调用target方针类,无恙便是这么简略~CompositeComponentDefinitioncompositeDef=newCompositeComponentDefinition(element.getTagName(),eleSource);compositeDef.addNestedComponent(newBeanComponentDefinition(sourceDef,sourceName));compositeDef.addNestedComponent(newBeanComponentDefinition(interceptorDef,interceptorName));compositeDef.addNestedComponent(newBeanComponentDefinition(advisorDef,org.springframework.cache.config.internalCacheAdvisor));parserContext.registerComponent(compositeDef);三.缓存key生成原理但是key是怎么发生的?经过上问的论述,就知道要找这个中间商CacheInterceptor,上代码。publicinterfaceCache{StringgetName();ObjectgetNativeCache();Cache.ValueWrapperget(Objectvar1);voidput(Objectvar1,Objectvar2);voidevict(Objectvar1);voidclear();publicinterfaceValueWrapper{Objectget();}}装备输出完了,亿万开端切入正题。publicBeanDefinitionparse(Elementelement,ParserContextparserContext){Stringmode=element.getAttribute(mode);if(aspectj.equals(mode)){this.registerCacheAspect(element,parserContext);}else{AnnotationDrivenCacheBeanDefinitionParser.AopAutoProxyConfigurer.configureAutoProxyCreator(element,parserContext);}returnnull;}往下走会抵达configureAutoProxyCreator办法,枭宠configureAutoProxyCreator办法的作用是装备主动署理创立器。

亿万枭宠:宋医生,别来无恙

publicinterfaceMyCacheKeyGenerator{/***生成key**/StringgenerateKey(Methodmethod,Object[]args,Objecttarget,Stringkey);}详细完成,其间wrapper是一个包装类,宋医生仅仅一个搬运工。//代码中cache-manager表明需求依靠一个缓存管理器,无恙它的作用是供给一种机制来缓存数据,以便在后续的拜访中能够更快地获取数据。

亿万枭宠:宋医生,别来无恙

privatestaticBeanDefinitionregisterOrEscalateApcAsRequired(Classcls,BeanDefinitionRegistryregistry,Objectsource){Assert.notNull(registry,BeanDefinitionRegistrymustnotbenull);if(registry.containsBeanDefinition(org.springframework.aop.config.internalAutoProxyCreator)){BeanDefinitionapcDefinition=registry.getBeanDefinition(org.springframework.aop.config.internalAutoProxyCreator);if(!cls.getName().equals(apcDefinition.getBeanClassName())){intcurrentPriority=findPriorityForClass(apcDefinition.getBeanClassName());intrequiredPriority=findPriorityForClass(cls);if(currentPrioritynewWrapper());getMykeyGenerator(method,key,wrapper);return((MyCacheKeyGenerator)wrapper.getData()).generate(args);}privatevoidgetMykeyGenerator(Methodmethod,Stringkey,Wrapperwrapper){if(wrapper.getData()!=null){return;}synchronized(wrapper){if(wrapper.getData()==null){MyCacheKeyGeneratorkeyGenerator=MyCacheKeyGenerator.initMyKeyGenerator(method,key);wrapper.setData(keyGenerator);}}}}那么咱们首要依据key获取表达式的调集,亿万假如是反射则会生成DynamicExpression表达式,亿万连接符会生成静态的StaticExpression表达式。

publicstaticMyCacheKeyGeneratorinitMyKeyGenerator(Methodmethod,Stringkey){SetimportHashSet=newHashSet();//依据key中的装备的办法生成表达式列表ListexpressionList=newLinkedList();generateExpression(key,expressionList);for(Expressionexpression:expressionList){if(expressioninstanceofDynamicExpression){StringexpressionStr=expression.execute();//判别格局合法性String[]items=expressionStr.split(.);StringindexValue=items[0].replace(args,);intindex=Integer.parseInt(indexValue);Classclx=method.getParameterTypes()[index];importHashSet.add(clx);//获取对应特点的办法StringfiledName=items[1];StringkeyValue=Character.toUpperCase(filedName.charAt(0))+filedName.substring(1);try{keyValue=get+keyValue;MethodfelidMethod=clx.getMethod(keyValue);expression.setExpression(String.format(String.valueOf(((%s)args[%s]).%s()),clx.getName(),index,felidMethod.getName()));}catch(NoSuchMethodExceptione){}}}//界说接口类型ClassNameinterfaceName=ClassName.get(com.xxx.xxx,MyKeyGenerator);//界说类名和包名ClassNameclassName=ClassName.get(com.xxx.xxx,DyMyKeyGeneratorImpl+classIndex.incrementAndGet());//创立类结构器TypeSpec.BuilderclassBuilder=TypeSpec.classBuilder(className.simpleName()).addModifiers(Modifier.PUBLIC).addSuperinterface(interfaceName);StringBuilderstringBuilder=newStringBuilder(stringBuilder);for(Expressionexpression:expressionList){stringBuilder.append(.append().append(expression.execute()).append());}MethodSpecgenerateMethod=MethodSpec.methodBuilder(generate).addModifiers(Modifier.PUBLIC).returns(String.class).addParameter(Object[].class,args).addStatement($TstringBuilder=newStringBuilder(),StringBuilder.class).addStatement(stringBuilder.toString()).addStatement(return$S,stringBuilder.toString();).build();classBuilder.addMethod(generateMethod);JavaFilejavaFile=JavaFile.builder(className.packageName(),classBuilder.build()).build();StringBuildersb=newStringBuilder();try{javaFile.writeTo(sb);}catch(IOExceptione){logger.error(写入StringBuilder失利,e);}try{System.out.println(sb.toString());Mapresults=compiler.compile(className+.java,sb.toString());Classclazz=compiler.loadClass(com.xxx.xxx.+className,results);return(KeyGenerator)clazz.newInstance();}catch(Exceptione){logger.error(编译失利,枭宠编译内容:枭宠{},sb.toString(),e);thrownewRuntimeException(内存class编译失利);}}publicstaticvoidgenerateExpression(Stringkey,ListexpressionList){if(StringUtils.isEmpty(key)){return;}intindex=key.indexOf(paramsPrefix);if(index。业界专家就人身稳妥产品预订利率宣布了定见,宋医生以为当时普通型人身稳妥产品预订利率研讨值为2.34%。

因为我国稳妥资金首要出资于固收类财物,无恙低利率环境下跟着存量固收财物逐渐到期及新增固收财物收益率下滑,无恙叠加权益商场动摇较大,负债端刚性本钱下险企面对利差损危险4款产品结算利率超越4%专属商业养老稳妥是指资金长时间确定用于养老保证意图,亿万被稳妥人收取养老金年纪应当到达法定退休年纪或年满60周岁的个人养老年金稳妥产品。

徐昱琛以为,枭宠专属商业养老稳妥是一种长时间出财物品,在堆集期完毕后,投保人在收取期能够经过养老年金方法收取,这是其一大优势。上一年10月份,宋医生《关于大力开展商业稳妥年金有关事项的告诉》提出,宋医生发挥专属商业养老稳妥交费灵敏、资金安全、支撑长时间年金收取等特色,打造具有基础性保证功用的养老金管理工具。

顶: 722踩: 85179