php网站开发技巧做资讯网站需要什么资质

web/2025/10/1 11:24:31/文章来源:
php网站开发技巧,做资讯网站需要什么资质,网站用户注册怎么建,网站建设都需要哪些书Spring中涉及的设计模式总结#xff0c;在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型#xff0c;具体详细的刨析会在后面的文章发布#xff0c;话不多说#xff0c;来个转发、在看、收藏三连… Spring中涉及的设计模式总结在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型具体详细的刨析会在后面的文章发布话不多说来个转发、在看、收藏三连1. 简单工厂实现方式BeanFactory。Spring中的BeanFactory就是简单工厂模式的体现根据传入一个唯一的标识来获得Bean对象但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。实质由一个工厂类根据传入的参数动态决定应该创建哪一个产品类。实现原理bean容器的启动阶段读取bean的xml配置文件,将bean元素分别转换成一个BeanDefinition对象。然后通过BeanDefinitionRegistry将这些bean注册到beanFactory中保存在它的一个ConcurrentHashMap中。将BeanDefinition注册到了beanFactory之后在这里Spring为我们提供了一个扩展的切口允许我们通过实现接口BeanFactoryPostProcessor 在此处来插入我们定义的代码。典型的例子就是PropertyPlaceholderConfigurer我们一般在配置数据库的dataSource时使用到的占位符的值就是它注入进去的。容器中bean的实例化阶段实例化阶段主要是通过反射或者CGLIB对bean进行实例化在这个阶段Spring又给我们暴露了很多的扩展点各种的Aware接口比如 BeanFactoryAware对于实现了这些Aware接口的bean在实例化bean时Spring会帮我们注入对应的BeanFactory的实例。BeanPostProcessor接口实现了BeanPostProcessor接口的bean在实例化bean时Spring会帮我们调用接口中的方法。InitializingBean接口实现了InitializingBean接口的bean在实例化bean时Spring会帮我们调用接口中的方法。DisposableBean接口实现了BeanPostProcessor接口的bean在该bean死亡时Spring会帮我们调用接口中的方法。设计意义松耦合。可以将原来硬编码的依赖通过Spring这个beanFactory这个工厂来注入依赖也就是说原来只有依赖方和被依赖方现在我们引入了第三方——spring这个beanFactory由它来解决bean之间的依赖问题达到了松耦合的效果.bean的额外处理。通过Spring接口的暴露在实例化bean的阶段我们可以进行一些额外的处理这些额外的处理只需要让bean实现对应的接口即可那么spring就会在bean的生命周期调用我们实现的接口来处理该bean。[非常重要]2. 工厂方法实现方式FactoryBean接口。实现原理实现了FactoryBean接口的bean是一类叫做factory的bean。其特点是spring会在使用getBean()调用获得该bean时会自动调用该bean的getObject()方法所以返回的不是factory这个bean而是这个bean.getOjbect()方法的返回值。例子典型的例子有spring与mybatis的结合。代码示例说明我们看上面该bean因为实现了FactoryBean接口所以返回的不是 SqlSessionFactoryBean 的实例而是它的 SqlSessionFactoryBean.getObject() 的返回值。3. 单例模式Spring依赖注入Bean实例默认是单例的。Spring的依赖注入(包括lazy-init方式)都是发生在AbstractBeanFactory的getBean里。getBean的doGetBean方法调用getSingleton进行bean的创建。分析getSingleton()方法public Object getSingleton(String beanName){//参数true设置标识允许早期依赖return getSingleton(beanName,true);}protected Object getSingleton(String beanName, boolean allowEarlyReference) {//检查缓存中是否存在实例    Object singletonObject this.singletonObjects.get(beanName);if (singletonObject null  isSingletonCurrentlyInCreation(beanName)) {//如果为空则锁定全局变量并进行处理。        synchronized (this.singletonObjects) {//如果此bean正在加载则不处理            singletonObject this.earlySingletonObjects.get(beanName);if (singletonObject null  allowEarlyReference) {//当某些方法需要提前初始化的时候则会调用addSingleFactory 方法将对应的ObjectFactory初始化策略存储在singletonFactories                ObjectFactory singletonFactory this.singletonFactories.get(beanName);if (singletonFactory ! null) {//调用预先设定的getObject方法                    singletonObject singletonFactory.getObject();//记录在缓存中earlysingletonObjects和singletonFactories互斥this.earlySingletonObjects.put(beanName, singletonObject);this.singletonFactories.remove(beanName);                }            }        }    }return (singletonObject ! NULL_OBJECT ? singletonObject : null);}getSingleton()过程图psspring依赖注入时使用了 双重判断加锁 的单例模式总结单例模式定义保证一个类仅有一个实例并提供一个访问它的全局访问点。spring对单例的实现spring中的单例模式完成了后半句话即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例这是因为spring管理的是任意的java对象。4. 适配器模式实现方式SpringMVC中的适配器HandlerAdatper。实现原理HandlerAdatper根据Handler规则执行不同的Handler。实现过程DispatcherServlet根据HandlerMapping返回的handler向HandlerAdatper发起请求处理Handler。HandlerAdapter根据规则找到对应的Handler并让其执行执行完毕后Handler会向HandlerAdapter返回一个ModelAndView最后由HandlerAdapter向DispatchServelet返回一个ModelAndView。实现意义HandlerAdatper使得Handler的扩展变得容易只需要增加一个新的Handler和一个对应的HandlerAdapter即可。因此Spring定义了一个适配接口使得每一种Controller有一种对应的适配器实现类让适配器代替controller执行相应的方法。这样在扩展Controller时只需要增加一个适配器类就完成了SpringMVC的扩展了。5. 装饰器模式实现方式Spring中用到的包装器模式在类名上有两种表现一种是类名中含有Wrapper另一种是类名中含有Decorator。实质动态地给一个对象添加一些额外的职责。就增加功能来说Decorator模式相比生成子类更为灵活。6. 代理模式实现方式AOP底层就是动态代理模式的实现。动态代理在内存中构建的不需要手动编写代理类静态代理需要手工编写代理类代理类引用被代理对象。实现原理切面在应用运行的时刻被织入。一般情况下在织入切面时AOP容器会为目标对象创建动态的创建一个代理对象。SpringAOP就是以这种方式织入切面的。织入把切面应用到目标对象并创建新的代理对象的过程。7. 观察者模式实现方式spring的事件驱动模型使用的是 观察者模式 Spring中Observer模式常用的地方是listener的实现。具体实现事件机制的实现需要三个部分,事件源,事件,事件监听器ApplicationEvent抽象类[事件]继承自jdk的EventObject,所有的事件都需要继承ApplicationEvent,并且通过构造器参数source得到事件源.该类的实现类ApplicationContextEvent表示ApplicaitonContext的容器事件.代码public abstract class ApplicationEvent extends EventObject {private static final long serialVersionUID 7099057708183571937L;private final long timestamp;public ApplicationEvent(Object source) {super(source);this.timestamp System.currentTimeMillis();    }public final long getTimestamp() {return this.timestamp;    }}ApplicationListener接口[事件监听器]继承自jdk的EventListener,所有的监听器都要实现这个接口。这个接口只有一个onApplicationEvent()方法,该方法接受一个ApplicationEvent或其子类对象作为参数,在方法体中,可以通过不同对Event类的判断来进行相应的处理。当事件触发时所有的监听器都会收到消息。代码public interface ApplicationListenerE extends ApplicationEvent extends EventListener {void onApplicationEvent(E event);}ApplicationContext接口[事件源]ApplicationContext是spring中的全局容器翻译过来是”应用上下文”。实现了ApplicationEventPublisher接口。职责负责读取bean的配置文档,管理bean的加载,维护bean之间的依赖关系,可以说是负责bean的整个生命周期,再通俗一点就是我们平时所说的IOC容器。代码public interface ApplicationEventPublisher {void publishEvent(ApplicationEvent event);}public void publishEvent(ApplicationEvent event) {    Assert.notNull(event, Event must not be null);if (logger.isTraceEnabled()) {         logger.trace(Publishing event in   getDisplayName() :   event);    }    getApplicationEventMulticaster().multicastEvent(event);if (this.parent ! null) {this.parent.publishEvent(event);    }}ApplicationEventMulticaster抽象类[事件源中publishEvent方法需要调用其方法getApplicationEventMulticaster]属于事件广播器,它的作用是把Applicationcontext发布的Event广播给所有的监听器.代码public abstract class AbstractApplicationContext extends DefaultResourceLoaderimplements ConfigurableApplicationContext, DisposableBean {private ApplicationEventMulticaster applicationEventMulticaster;protected void registerListeners() {// Register statically specified listeners first.for (ApplicationListener listener : getApplicationListeners()) {    getApplicationEventMulticaster().addApplicationListener(listener);    }// Do not initialize FactoryBeans here: We need to leave all regular beans// uninitialized to let post-processors apply to them!    String[] listenerBeanNames getBeanNamesForType(ApplicationListener.class, true, false);for (String lisName : listenerBeanNames) {    getApplicationEventMulticaster().addApplicationListenerBean(lisName);    }  }}8. 策略模式实现方式Spring框架的资源访问Resource接口。该接口提供了更强的资源访问能力Spring 框架本身大量使用了 Resource 接口来访问底层资源。Resource 接口介绍source 接口是具体资源访问策略的抽象也是所有资源访问类所实现的接口。Resource 接口主要提供了如下几个方法:getInputStream()定位并打开资源返回资源对应的输入流。每次调用都返回新的输入流。调用者必须负责关闭输入流。exists()返回 Resource 所指向的资源是否存在。isOpen()返回资源文件是否打开如果资源文件不能多次读取每次读取结束应该显式关闭以防止资源泄漏。getDescription()返回资源的描述信息通常用于资源处理出错时输出该信息通常是全限定文件名或实际 URL。getFile返回资源对应的 File 对象。getURL返回资源对应的 URL 对象。最后两个方法通常无须使用仅在通过简单方式访问无法实现时Resource 提供传统的资源访问的功能。Resource 接口本身没有提供访问任何底层资源的实现逻辑针对不同的底层资源Spring 将会提供不同的 Resource 实现类不同的实现类负责不同的资源访问逻辑。Spring 为 Resource 接口提供了如下实现类UrlResource访问网络资源的实现类。ClassPathResource访问类加载路径里资源的实现类。FileSystemResource访问文件系统里资源的实现类。ServletContextResource访问相对于 ServletContext 路径里的资源的实现类.InputStreamResource访问输入流资源的实现类。ByteArrayResource访问字节数组资源的实现类。这些 Resource 实现类针对不同的的底层资源提供了相应的资源访问逻辑并提供便捷的包装以利于客户端程序的资源访问。9. 模版方法模式经典模板方法定义父类定义了骨架(调用哪些方法及顺序)某些特定方法由子类实现。最大的好处代码复用减少重复代码。除了子类要实现的特定方法其他方法及方法调用顺序都在父类中预先写好了。所以父类模板方法中有两类方法共同的方法所有子类都会用到的代码不同的方法子类要覆盖的方法分为两种抽象方法父类中的是抽象方法子类必须覆盖钩子方法父类中是一个空方法子类继承了默认也是空的注为什么叫钩子子类可以通过这个钩子(方法)控制父类因为这个钩子实际是父类的方法(空方法)Spring模板方法模式实质是模板方法模式和回调模式的结合是Template Method不需要继承的另一种实现方式。Spring几乎所有的外接扩展都采用这种模式。具体实现JDBC的抽象和对Hibernate的集成都采用了一种理念或者处理方式那就是模板方法模式与相应的Callback接口相结合。采用模板方法模式是为了以一种统一而集中的方式来处理资源的获取和释放以JdbcTempalte为例:public abstract class JdbcTemplate {public final Object execute(String sql){        Connection connull;        Statement stmtnull;try{            congetConnection();            stmtcon.createStatement();Object retValueexecuteWithStatement(stmt,sql);return retValue;        }catch(SQLException e){             ...        }finally{            closeStatement(stmt);            releaseConnection(con);        }    }protected abstract Object executeWithStatement(Statement stmt, String sql);}引入回调原因JdbcTemplate是抽象类不能够独立使用我们每次进行数据访问的时候都要给出一个相应的子类实现,这样肯定不方便所以就引入了回调。回调代码public interface StatementCallback{Object doWithStatement(Statement stmt);}利用回调方法重写JdbcTemplate方法public class JdbcTemplate {public final Object execute(StatementCallback callback){        Connection connull;        Statement stmtnull;try{            congetConnection();            stmtcon.createStatement();            Object retValuecallback.doWithStatement(stmt);return retValue;        }catch(SQLException e){            ...        }finally{            closeStatement(stmt);            releaseConnection(con);        }    }    ...//其它方法定义}Jdbc使用方法如下JdbcTemplate jdbcTemplate...;    final String sql...;    StatementCallback callbacknew StatementCallback(){public ObjectdoWithStatement(Statement stmt){return ...;    }}jdbcTemplate.execute(callback);为什么JdbcTemplate没有使用继承因为这个类的方法太多但是我们还是想用到JdbcTemplate已有的稳定的、公用的数据库连接那么我们怎么办呢我们可以把变化的东西抽出来作为一个参数传入JdbcTemplate的方法中。但是变化的东西是一段代码而且这段代码会用到JdbcTemplate中的变量。怎么办那我们就用回调对象吧。在这个回调对象中定义一个操纵JdbcTemplate中变量的方法我们去实现这个方法就把变化的东西集中到这里了。然后我们再传入这个回调对象到JdbcTemplate从而完成了调用。参考https://www.cnblogs.com/digdeep/p/4518571.htmlhttps://www.cnblogs.com/tongkey/p/7919401.htmlhttps://www.cnblogs.com/fingerboy/p/6393644.htmlhttps://blog.csdn.net/ovoo_8/article/details/51189401https://blog.csdn.net/z69183787/article/details/65628166《spring源码深度分析》作者 | iCoding91链接 | blog.csdn.net/caoxiaohong1005-END-推荐阅读1. 如何降低程序员的工资2. 编写 Spring MVC 的 14 个小技巧3. 技术大佬的呕心力作4. 详述 Spring Data JPA 的那些事儿

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

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

相关文章

网络科技网站排名巴南网站建设哪家好

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测) 单变量时间序列单步预测。 ELM(Extreme Learning Machine,极限学习机)和AdaBoost(Adaptive Boosting,自适应提升)都是机…

途牛旅游网站建设方案做音乐网站怎么放音乐

DeepBook是Sui上的第一个原生流动性层,通过Sui可预测且低廉的gas费,将促进DeepBook上的大规模交易活动。鉴于DeepBook的中央限价订单簿(Central Limit Order Book,CLOB)架构,交易量越大,资产价格…

网站设计方案定制WordPress无法删除插件

迅播影院-Gvod Player-Gvod电影-迅雷电影下载动漫下载|BT|漫画|动画|游戏 - 极影动漫一路电影网-高清电影下载_1080p电影下载_蓝光电影下载_3d电影下载天天美剧人人影视电影天堂电影FMTorrentProject - Torrent Search EngineBT Kitty - Professional torrent searc…

网站公司设计公司新手如何建立网站

PS:今天的23中设计模式中的创建者方式,至此告一段落。我今天带来的技术分享为创建者模式以及原型模式。当然在Java中这两种方式很常见,只不过我们写的次数确实有点低而已,但是这不是我不学它的借口!!!创建者…

团购网站模板 免费品牌微信网站开发

前言 在实际开发过程中,我们经常需要处理一些周期性或定时执行的任务,如数据备份、报表生成、邮件发送等。Spring Boot通过集成Quartz或使用Spring自带的Scheduled注解可以方便地实现定时任务功能。本文将详细介绍如何在Spring Boot项目中使用Scheduled…

网络营销 网站广州网站设计我选刻

题干: 问题描述 给n个有序整数对ai bi,你需要选择一些整数对 使得所有你选定的数的aibi的和最大。并且要求你选定的数对的ai之和非负,bi之和非负。 输入格式 输入的第一行为n,数对的个数   以下n行每行两个整数 ai bi 输出格…

郑州企业建站详情php网站制作

正题 题目链接:https://www.luogu.com.cn/problem/P7726 题目大意 一个长度为nnn的排列,给出nnn个可重集SiS_iSi​表示所有长度为iii的区间的最小值构成的集合。 求构造这个排列。 1≤n≤8001\leq n\leq 8001≤n≤800 解题思路 对于一个数字,如果在S…

天河建设网站外包html编辑器怎么导入图片

1.胶囊剂不检查的项目是()。 A.装量差异 B.崩解时限 C.硬度 D.水分 E.外观 正确 正确答案:左边查询 学生答案:C 2.成裂片和顶裂的原因正确的是()。 A.压力分布的不均匀 B.颗粒中细粉太多 C.颗粒过干 D.弹性…

网站建设方投资成本wordpress首页模板文件位置

目录 预备知识 网络字节序 网络字节序和主机字节序转换的库函数 socket编程接口 socket常见API sockaddr结构 套接字的种类 预备知识 1.在IP数据包头部中,有两个IP地址,分别叫做源IP地址和目的IP地址。 2.端口号:是传输层协议的内容…

专业的外贸行业网站设计代码网站模板怎么做

1.人间骄阳刚好,风过林梢,彼时他们正当年少。 2.这路遥马急的人间渐行、渐远、渐无声,看淡若清风的现世且听、且吟、且从容。 3.一个能够升起月亮的身体,必然驮住了无数次日落。 4.并不可否认,生活磨掉了我们一部分…

推广网站制作深圳网博网站建设

条形码可以标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。那么如何在Excel中快速生成条形码呢?我们以前看到的方法有&am…

亚马逊服务器做影视网站wordpress重新设置域名

【0】README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 Kruskal(克鲁斯卡尔)算法 的idea 并用 源代码加以实现; 0.2)最小生成树的基础知识,参见 http://blo…

网页小程序开发seo岗位工作内容

10月10日消息,今天360旗下的鲁大师正式挂牌上市。上市之后,鲁大师的盘中涨幅一度扩大至100%,鲁大师的市值也一度达到了14亿港元。过去三个财年,鲁大师的营业收入分别为6981.2万、1.23亿和3.20亿人民币。简单介绍360,36…

深圳大型网站建设沽源网站建设案例

Test.vue:元素外面包一层transition&#xff0c;展示的时候就默认调用style里面的v-enter-action和v-leave-action执行进入和退出效果&#xff0c;appear上来默认展示动画效果 <template><div><button click"isShow !isShow">显示/隐藏</butto…

科技文化网站建设方案郑州品牌策划设计公司

1. FRP介绍 FRP (Fast Reverse Proxy) 是比较流行的一款。FRP 是一个免费开源的用于内网穿透的反向代理应用&#xff0c;它支持 TCP、UDP 协议&#xff0c; 也为 http 和 https 协议提供了额外的支持。你可以粗略理解它是一个中转站&#xff0c; 帮你实现 公网 ←→ FRP(服务器…

长沙圭塘网站建设公司网站开发完成如何上线

Werkzeug库介绍:Python WSGI工具集 1. 什么是Werkzeug?2. 基本概念3. 安装Werkzeug4. 基本用法示例4.1 创建一个简单的WSGI应用4.2 路由和URL构建4.3 处理表单数据 5. 高级特性5.1 中间件5.2 Sessions5.3 文件上传 6. 性能考虑7. 注意事项8. 结语 1. 什么是Werkzeug? Werkze…

织梦系统网站模板修改o2o网站建设市场

我有一个很小的python程序&#xff0c;它可以很好地使用ffmpeg的子进程从linux中的网络摄像头(至少对于有内置网络摄像头的笔记本电脑)捕获短视频。在现在我正试图编写同样的程序来捕捉windows中的网络摄像头&#xff0c;我知道我不能使用通用的“/dev/video0”&#xff0c;它在…

手表网站建站襄阳做网站的公司

1.现象:10.22.33.41机器频繁出现告警&#xff0c;每20分钟一次&#xff0c;可以复现 现后台登录10.22.33.41机器,使用top c 命令定位到cpu高的进程,发现该进程就hbase相关的 登录HD集群的WebUI界面&#xff0c;选hbase集群 Hbase->实例 ->找到cup告警的实例 ->进入该实…

网站建设方案样本wordpress外链音乐

eclipse for php 安装2021-12最后版本4.22 2021-12 R | Eclipse Packages jdk17 x64 dmg安装包,要安装jdk这个才能运行 Java Downloads | Oracle

广州英文外贸seo网站优化西安市专业网站建设

这个博客是用来记录关于【从Solidworks中导出URDF模型】的学习历程&#xff1a; 相关课程链接见&#xff1a;如何从Solidworks导出URDF模型 • 古月 (guyuehome.com) 下面让我们一起开始吧&#xff01;&#xff01;&#xff01; 1. sw_urdf_exporter插件介绍 插件下载链接&…