衡水建设公司网站PHP网站开发简单实例

pingmian/2025/10/7 22:49:22/文章来源:
衡水建设公司网站,PHP网站开发简单实例,企业网站seo推广,淄博建设网站公司下面的代码#xff0c;照着复制就能跑起来 今天看了下Spring的Configuration#xff0c;即java类配置bean,#xff08;这个spring3的新功能#xff0c;虽然现在已经spring5了#xff0c;但是这种配置bean的方式也是比较火的#xff09; 做了如下测试#xff0c;发现一个…下面的代码照着复制就能跑起来 今天看了下Spring的Configuration即java类配置bean,这个spring3的新功能虽然现在已经spring5了但是这种配置bean的方式也是比较火的 做了如下测试发现一个现象先说这个现象后面用自己的理解再简单实现一下。 先说现象 在java配置类中加Configuration下面的声明bean的方法就只会被调一次也就是初始化的时候哪怕是下面的方法直接互相引用返回的new的对象的构造方法也只会调一次 而如果不加Configuration那么下面的方法如果有相互调用那么返回的new的对象的构造方法就会被调多次 下面是测试代码 Configuration ComponentScan(com.zs.cglib) //这个类作为配置类 public class CglibConfig {Beanpublic TestDomain testDomain(){return new TestDomain();}Beanpublic TestDomainTwo testDomainTwo(){//这个方法会预先调用上一个方法testDomain();return new TestDomainTwo();} }Component(testDomain) public class TestDomain {public TestDomain() {//构造参数打印证明被调过System.out.println(new TestDomain-------------);} }Component(testDomainTwo) public class TestDomainTwo {public TestDomainTwo() {//构造参数打印证明被调过System.out.println(new TestDomainTwo-------------);} }public class StartMain {//启动测试public static void main(String[] args) {AnnotationConfigApplicationContext anno new AnnotationConfigApplicationContext(CglibConfig.class);System.out.println(anno.getBean(TestDomain.class));System.out.println(anno.getBean(TestDomainTwo.class));} }可以发现如果CglibConfig加上Configuration就会打印出 new TestDomain------------- new TestDomainTwo------------- 如果把Configuration去掉就会打印出 new TestDomain------------- new TestDomain------------- new TestDomainTwo------------- 也就是说加上Configurationnew出TestDomain实例只执行了一次也就是说testDomainTwo()中调用的testDomain()并没有new出新的TestDomain实例。 而把Configuration去掉TestDomain实例就会被new两次也就是testDomainTwo()中调用的testDomain()也有new出TestDomain实例。 这是为什么呢当然肯定和Configuration有关。 一般情况我们把带有Configuration的类叫做全注解配置类也叫Full配置类 我们把不带Configuration的类叫Lite配置类 源码解释 追了下源码一直找到org.springframework.context.annotation.ConfigurationClassPostProcessor#enhanceConfigurationClasses 突然看到enhancer这不是cglib的东西么根据这个线索再追就知道了加上Configuration其实是用了Cglib代理了 所以方法已经被增强了那肯定还有其他逻辑 再找到org.springframework.context.annotation.ConfigurationClassEnhancer#newEnhancer 这就是cglib了那就找callback再找intercept方法org.springframework.context.annotation.ConfigurationClassEnhancer.BeanMethodInterceptor#intercept 这个方法里面增强了原方法其实就是用map实现的下面来个简单的模仿 根据cglib实现简单的效果 亲自写了个简单的cglib实现还原了Configuration的这种现象 测试代码如下 CglibConfig这个类把注解都去掉咱们自己实现这个只调一次的功能 public class CglibConfig {public TestDomain testDomain(){return new TestDomain();}public TestDomainTwo testDomainTwo(){testDomain();return new TestDomainTwo();} } TestDomain和TestDomainTwo两个类不变 新增一个callback实现以下逻辑。这都是cglib的知识点不动可以查下cglib简单实现 public class MyCallBack implements MethodInterceptor {//这个map就记录了方法每次调用的痕迹并把调用后的结果保存起来不是第一次调用的话就直接将结果返回就行了private static MapString,Object map new HashMap();Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {//获取方法名字String name method.getName();if(isFirst(name)){//如果方法是第一次调用Object invoke methodProxy.invokeSuper(o, objects);//调用完将结果保存在map中map.put(name,invoke);return invoke;}else{//第二次第三次调用就走这里直接返回map中的结果return map.get(name);}}private boolean isFirst(String name) {//判断是不是第一次调用其实就是看这个name在map中是不是已经注册了Object invoke map.get(name);if(invoke null){return true;}return false;} } 再写个cglib的util,以便main方法调用 public class CglibUtil {public static Object getBean(){//看到这个应该就要想到cglibEnhancer enhancer new Enhancer();enhancer.setSuperclass(CglibConfig.class);enhancer.setCallback(new MyCallBack());CglibConfig proxy (CglibConfig) enhancer.create();return proxy;} } //主方法测试 public class StartMain {public static void main(String[] args) {CglibConfig bean (CglibConfig) CglibUtil.getBean();bean.testDomain();bean.testDomainTwo();} }执行的结果是 new TestDomain------------- new TestDomainTwo------------- 总结 利用cglib代理增强 如果这个方法第一次调用就把调用的方法名和返回的结果保存在map中 后面再有调用就直接返回结果了不会真正再去执行了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙岗建设网站做网站运用的软件

原文:01. 把存储过程结果集SELECT INTO到临时表在开发过程中,很多时候要把结果集存放到临时表中,常用的方法有两种。 一. SELECT INTO 1. 使用select into会自动生成临时表,不需要事先创建 select * into #temp from sysobjects select * fro…

插画师个人网站是怎么做的wordpress博客备份

最近做了IAP U盘升级模块开发,总结下IAP基本开发流程,不深入讨论原理。 详细原理参考 首先需要知道我们需要把之前的APP区域拆一块出来做BOOT升级程序区域。 以STM32F103为例,0x08000000到0x0807FFFF为FLASH空间,即上图代码区域…

北京住房城乡建设网站南宁手机平台网站

web资源类型: 静态资源:原始形式与响应内容一致,在客户端浏览器执行 动态资源:原始形式通常为程序文件,需要在服务器端执行之后,将执行结果返回给客户端 LAMP架构组成: L:linux …

建设银行网站表单清理推荐郑州网站建设公司

93.复原IP地址 思路: 与分割回文串相似,复原ip地址是将给定字符串分割成点分十进制的四段,切割问题就可以使用回溯搜索法把所有可能性搜出来。回溯三部曲: 递归参数:除了传入的需要分割的字符串,仍然需要…

好用的h5网站在线网站地图生成器

HwBinder与普通Binder是一样的,区别是前者是专门给硬件使用,后者是给一般的应用程序使用,为了不影响现有的binder,单独增加硬件的HwBinder来实现硬件相关进程的通信。 HwBinder也是有四部分组成:hwservermanager、server、client…

seo网站推广专员招聘手机网站建设wap

对于有些服务端接口返回是固定值的json,可通过配置nginx直接返回json,减少程序的加载对资源的占用,减少接口响应时间 location ~* (request/update)$ { default_type application/json; return 200 {"update":"no&quo…

做建筑设计的网站推荐提升学历选什么专业比较好

科技3D线上云展馆作为一种基于VR虚拟现实和互联网技术的新一代展览平台。可以在线上虚拟空间中模拟真实的展馆,让观众无需亲自到场,即可获得沉浸式的参观体验。通过这个展馆,您可以充分、全面、立体展示您的产品、服务以及各种创意作品&#…

网站建站一本通山西网站制作平台

点、线、边缘检测背景知识。书中主要介绍了图像的一阶导数与二阶导数,这个之前的文章中有过介绍这里在复习一遍。对于函数 ,对于点 在x方向的一阶偏导为:,二阶偏导为:之后书中总结了一阶导与二阶导对于图像求取边缘的结论:孤立点检…

建设部网站危险性较大邮政管理网站建设

结构化查询语言(SQL)是一种广泛使用的工具,用于管理和操作数据库。基本的SQL查询简单易学,但掌握高级SQL技术可以将您的数据分析和管理能力提升到新的高度。 高级SQL技术是指一系列功能和函数,使您能够对数据执行复杂…

优秀网站下载建设网站站点过程中

表达式求值问题 ①问题描述 表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:1122*(7-4)/3。中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:22 7 4 - * 3 / 1…

装修设计案例网站苏州网页设计多少钱

亲爱的猎人:我们将于9月20日0:00对所有大区全部服务器进行更新维护,本次维护预计时间4小时。还请猎人们提早下线,避免不必要的损失。我们将视实际情况提前或延迟开服,感谢大家的支持!维护时间:2016年9月20日(周二)0:00…

网站开发与维护考察试题photoshop破解版下载免费中文版

国外黑客杂志: 《phrack》黑客杂志 http://www.phrack.org 《phrack》创刊于80年代,是世界级的顶级黑客杂志,每年只有一期,现已出了65期,国人似乎至今只有三人在上面发表发表文章,三人好像都是绿盟的人&…

设计图片网站哪个好五金东莞网站建设技术支持

文章目录 一 、前言二、RN与安卓通信2.1 RN 调用安卓原生组件2.2 RN 应用消息机制方式与安卓原生代码切换2.3 RN 应用 Promise 机制与安卓原生代码通信2.4 RN 应用 callback 回调方式与安卓原生代码通信 三、RN与IOS通信3.1 定义导出的方法名3.2 promise 实现回调函数3.3 继承 …

德国建设部网站台州网站设计飞速

在建立数据设计模型时,我们需要注意表设计与类设计之间的差别,这事实上是数据模型与对象模型之间的差别。 数据模型与对象模型 我们首先来分析在设计时对冗余的考虑。前面在讲解数据分析模型时就提及,在确定数据项模型时,需要遵…

本地网站建设软件网站内容优化细节

游戏存档 0.建立游戏存档类 1.建立存档 命名要用规律,读档时根据命名调用 2.读取存档 这里是用存档时间(秒)验证是否有存档成功。 两种鼠标位置射线检测方法 两种适用性未使用大量项目验证,为个人观点 1.适用于游戏中 2.适用于…

广州市南沙建设局网站什么是网站建设有哪些具体内容

文章目录 栈,堆stack object的生命周期static local object的生命周期global object的生命周期heap objects 的生命期new:先分配memory,再调用构造函数delete: 先调用析构函数,再释放 memory动态分配所得的内存块,in V…

dw做网站首页代码有没有catia做幕墙的网站

一、章节内容概述 把管理科学的潜力转变为绩效,主要取决于管理者。要做到这一点,管理者必须理解管理科学是什么以及能够做什么。管理者必须明白,管理科学固有的特殊局限性在很大程度上源于自身的起源和历史。但最重要的是,管理者…

织梦可以做移动网站吗自己做网站引用别人的电影

我们在使用python过程中,为了避免错误删除,会选择做好一个序列后可以插入另外的序列中做为新序列的一部分内容。方便完成一些复杂的工程或多个片段分别编辑后再串成一个完整工程的操作。之前小编向大家介绍了在序列中起到累计作用的reduce函数(https://w…

制作微网站的平台有哪些建各企业网站多少钱

标哥是我的大学老师。标哥也是我们很多学生公认上课非常好的老师,最近标哥突然想见见我这个年轻仔,让我去广州见见他,当然,并不是说他不能来深圳,见面的时候标哥特意给我们解释了一遍,我肯定是能理解他的良…

thinkphp 网站模版合肥html5网站建设

AI智能开发!网站一键复刻!设计稿秒变成品! 相信对很多关注低代码和AI技术的小伙伴来说, 都觉得像这些还只是停留在概念上的技术,很难落地实践。 但是在「织信」已经全部都做到了! 无图无真相&#xff0…