数据库连接池、反射和工厂模型

JavaWeb实战学习地图:从Servlet到MVC架构与数据库连接池详解 JavaWeb开发是构建企业级Web应用的核心技术栈,其基础建立在Servlet规范之上,通过处理HTTP请求与响应实现动态内容交互。理解Servlet的生命周期、线程安全模型及请求转发与重定向的原理,是掌握Web开发的关键。这一技术价值在于能够构建稳定、可扩展的后端服务,广泛应用于电商、金融、社交等各类互联网平台。在实际开发中,采用MVC设计模式进行职责分离,并结合数据库连接池技术优化性能,是提升工程实践能力的必经之路。本文基于JavaWeb学习笔记,深入解析Servlet核心机制、MVC分层架构的实现, 阅读详情

一,     由于创建连接的代价是很高的,我们每次访问数据库都要创建连接的话是非常西欧阿豪性的,我们可以在程序启动的时候先创建出一写连接,放到一个集合里,访问数据库的时候从集合中获取,使用结束再放回集合中。

例子:package cn.hbsi;

 

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

import java.util.LinkedList;

import java.util.Properties;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

 

 

public class MyDataSource {

 

      private LinkedList<Connection> pool = new LinkedList<Connection>();

 

      private String url;

      private String user;

      private String password;

      private String driver;

      private int initSize;

      private int maxSize;

      private int currentSize;

      private Lock lock = new ReentrantLock();

 

      /*

       * 服务器启动的时候, 创建MyDataSource, 在MyDataSource创建的时候, 初始化5个连接

       */

      public MyDataSource() {

           try {

                 Properties prop = new Properties();

                 InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("connConfig.properties");

                 prop.load(in);

                 url = prop.getProperty("url");

                 user = prop.getProperty("user");

                 password = prop.getProperty("password");

                 driver = prop.getProperty("driver");

                 initSize = Integer.parseInt(prop.getProperty("initSize"));

                 maxSize = Integer.parseInt(prop.getProperty("maxSize"));

                 Class.forName(driver);

                 for (int i = 0; i < initSize; i++)

                      createConnection();

           } catch (Exception e) {

                 throw new RuntimeException(e);

           }

      }

 

      public Connection getConnection() throws SQLException {

           try {

                 lock.lock();

                 if (pool.size() == 0 && currentSize < maxSize)

                      createConnection();

                 if (pool.size() > 0)

                      return pool.remove(); // 从list中删掉第一个元素, 将这个元素作为返回值返回

                 throw new SQLException("系统忙, 一会再来吧.");

           } finally {

                 lock.unlock();

           }

      }

 

      public void release(Connection conn) {

           pool.add(conn); // add是添加到最后一个

      }

 

      private void createConnection() throws SQLException {

           pool.add(DriverManager.getConnection(url, user, password));

           currentSize++;

      }

}

二,     反射

1主要是指程序可以访问、检测和修改其自身状态或行为的一种能力。

2.Java反射提供了以下功能:

a.           运行时判断任意一个对象所属的类;

b.          运行时构造任意一个类的对象;

c.          运行时判断任意一个类所具有的成员变量和方法。

d.          运行时调用任意一个对象的方法,通过反射甚至可以调用到 peivate的方法。

e.           生成动态代理。

3.

a.使用class类的getclass()方法得到class对象。

Myobject x=new myobject();

Class c1=x.getclass();

b.使用class类的forname()静态方法获得与字符串对应的class类对象。Class c2=class。Forname(“java.lang.Stirng”);

c.使用“类型名.class”获取该类型对应的class对象。

Class c1=Manager.Class;

Class c2=int.class;

Class c3=double[].class;

4.常用方法

Public String getName():获取此class对象所表示的权限定名;

Public field[] getField();获取此class对象所表示实体的所有public字段;

Public Field[] getDeclaredFields():获取此class对象所表示实体的所有字段;

Public Method[] getMethod():获取此class对象所表示实体的所有的public字段;

Public class[] getInterfaces():获取此class对象所有表示实体实现的所有接口class列表。

Public T newInstance():创建此class对象所表示类的一个新实例,使用的是不带参数的构造方法。

Public Method getMethod(String name,class<?>…parameterTypes):获取此class对象特定的方法,其中neme参数用于指定方法的名称;parameterTypes为可变参数,用于指定方法的数据类型

5.获取类类信息

a.获取指定类对应的class对象

Class clazz=Class.forName(“java.util.arrayList”);

b.获取指定类得包名

String packageName=clazz.getPackage().getName();

c获取指定类的修饰符

int mod=clazz.getModifiers();

String modifier=Modifier.toStrng(mod);

d获取指定类的完全限定名

String className=clazz.getName();

E获取指定了的父类

Class superClazz=clazz.getSuperclass();

F获取指定类实现的接口

Class[] interfaces=clazz.getinterfaces();

G获取指定类的成员变量

Field[] field=clazz.getDeclaredFields();

三.工厂模式

工厂方法
你会建立一个专门生产Sample实例的工厂:

public class Factory{

  public static Sample creator(int which){

  //getClass 产生Sample 一般可使用动态类装载装入类。
  if (which==1)
    return new SampleA();
  else if (which==2)
    return new SampleB();

  }

}

 

 

C++工厂模式高级应用:6种变形用法解决大型项目对象创建难题 在软件工程中,设计模式是解决常见架构问题的经典方案,工厂模式作为创建型模式的代表,其核心原理是将对象的创建与使用解耦,提升代码的可维护性和扩展性。这一模式的技术价值在于通过封装变化点,降低模块间的耦合度,使系统更易于应对需求变更。在大型C++项目中,面对编译依赖、生命周期管理、运行时动态配置等复杂场景,经典的工厂模式常显不足。为此,工程师们结合C++语言特性,演化出多种高级变形用法,例如静态注册工厂通过让产品类自动注册到中央注册表,完美遵循开闭原则,支持插件化架构;而模板工厂则利用编译期多态,在类型确定时提 阅读详情

相关推荐

ASP.NET HttpHandler映射原理与工厂模式深度解析

HttpHandler是ASP.NET请求处理管线的核心执行单元,其映射过程本质是URL路径与HTTP动词到IHttpHandler实例的精准路由机制。该机制依托配置驱动(web.config中httpHandlers节)、工厂模式(IHttpHandlerFactory)与多级缓存(路径映射缓存+工厂实例缓存)协同工作,决定请求由哪个Handler响应。理解映射流程对解决配置失效、并发状态混乱、IsReusable行为异常等高频问题至关重要。本文聚焦HttpHandler映射四阶段(RemapHandle

didi9310的博客 501

使用工厂模式+单例模式实现[连接池]应用

文章目录前言Pool抽象父类数据库连接池实现类 前言 本章介绍使用工厂模式+单例模式实现数据库连接池,基于池思想的各种实现我们接触的很多,如数据库连接池,redis连接池,线程池等等,在第三方框架下我们只需要书写好一下配置即可完成对池的使用。 而我们抽象出来的池一般都是为了解决频繁创建某资源而造成的服务器压力,我们将创建某资源的步骤交给池管理,我们只需要调用即可。 今天我们说的便是数据库连接池,数据库连接池中存放的都是Connection对象,所以说池对象中必然是要有一个容器来存放这些对象的,而这个容器

Cocoxzq000的博客 778

深入掌握九大核心设计模式:从创建到行为的全流程实战解析

静态工厂方法是指定义在工厂类中的静态方法,用于根据输入参数返回某个接口或抽象类的具体实现。这种方法的最大优势是调用方便,无需实例化工厂对象即可直接调用,符合“工具类”的使用习惯。其典型结构包括:产品接口、多个具体产品类和一个包含静态创建方法的工厂类。以下是一个基于支付方式选择的简单工厂实现示例:// 支付接口// 具体实现类@OverrideSystem.out.println("使用支付宝支付:" + amount + "元");@Override。

weixin_36289742的博客 893

设计模式之工厂模式

工厂模式是面向对象编程中常用的创建型设计模式,通过封装对象创建过程实现客户端与创建逻辑的解耦。主要包括三种类型:1)简单工厂模式(静态工厂方法),适用于少量产品但违反开闭原则;2)工厂方法模式(子类决定实例化),符合开闭原则但增加类数量;3)抽象工厂模式(创建相关对象族),保证一致性但扩展性受限。典型应用包括数据库连接池、Spring框架、日志系统和SpringBoot自动装配。工厂模式的优势在于降低耦合、提高扩展性、集中管理对象创建,是现代框架如Spring实现IoC容器的核心模式。开发中应根据产品

xiaodaidai的博客 1187

工厂模式获取jdbc连接并进行操作

针对工厂模式的三个类别(简单工厂模式、工厂方法模式、抽象工厂模式)分别实现获取数据库连接并进行DML操作 .

常用四大连接池集合

常用四大连接池集合c3p0,dbcp,druid,HikariCP,内有四大连接池的使用方法,配置方法,以及它们之间的比较和介绍,和spring继承等配置方法。 c3p0 太古老,代码及其复杂,不利于维护。貌似都比它强。 dbcp 是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。 druid 功能比较全面,且扩展性较好,比较方便对jdbc接口进行监控跟踪等。 HikariCP 光连接池,速度性能最好

Mysql 数据库和连接池

Mysql 数据库和连接池 MySql数据库连接池专题 一、什么是数据库连接池? 官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。 个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐...

MichaelAn的博客 1593

基于STM32F407的定时器以及定时器中断的实现

基于STM32F407的定时器以及定时器中断的实现

weixin_57941207的博客 5228

‌架构设计:工厂模式实现WebSocket连接池的优化方案

工厂模式是一种创建型设计模式,通过一个工厂类统一创建对象,隐藏实例化细节。核心思想:将连接的创建逻辑封装在工厂类中,连接池通过工厂获取连接,而非直接实例化。优化点连接重用:工厂可复用空闲连接,避免重复创建。资源控制:工厂可限制最大连接数$M$,防止资源耗尽。动态管理:工厂支持连接池的懒加载和销毁,提升伸缩性。整体架构工厂类 (ConnectionFactory):负责创建和初始化WebSocket连接。连接池类 (ConnectionPool):管理连接集合,使用工厂获取连接。

2501_93894124的博客 936

触摸屏蓝牙控制

使用杰理芯片通过蓝牙实现触摸屏功能,需要结合触摸屏数据采集、蓝牙数据传输以及移动端应用的实现。

m0_46145044的博客 1109

告别手动画图!用SUMO的netedit快速搭建高速公路交织区路网(附完整XML文件)

本文详细介绍了如何使用SUMO的netedit工具高效构建高速公路交织区路网,避免手动绘图的低效与错误。通过实战案例和XML文件示例,帮助交通工程专业学生快速掌握复杂道路结构建模技巧,特别解析了spreadType参数设置和速度单位换算等关键操作。

weixin_29085865的博客 259

实现一个自己的数据库连接池----利用工厂设计模式

1.抽象接口的实现 /** 1. @author : GONG ZHI QIANG 2. @data : 2019-08-30 , 22:50 3. @user : SnaChat 4. @project: DesignPattern 5. @description : */ public abstract class Pool { public String propert...

SUPERCHAT8的博客 877

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 358

java超详细面试题个人归纳

多线程情况下,若是A线程调用getInstance,发现instance为null,那么它会开始创建实例,如果此时CPU发生时间片切换,线程B开始执行,调用getInstance,发现instance也为null(因为A并没有创建对象),然后B创建对象,然后切换到A,A因为已经检测过了,不会再检测了,A也会去创建对象,两个对象,单例失败。普通变量是不可以的,普通变量在线程之间的传递都是要通过主内存进行的,线程1修改了变量A后,需要去主内存中回写,线程2等待线程1回写结束再去获取,这是一般过程。

清秋愁上愁的博客 1220

YOLOv5 改进点总览:轻量化、高精度的背后有哪些魔改?

YOLOv5是由Ultralytics团队开发的高效目标检测模型,其核心改进包括:主干网络采用CSPDarknet53提升梯度传播效率;特征融合使用PANet增强小目标识别;输出结构采用解耦头设计优化定位和分类任务。此外,YOLOv5通过CIoU损失函数、Mosaic数据增强和SimOTA标签分配机制进一步提升性能。模型支持多种推理格式(ONNX/TensorRT等),并具备自动锚框匹配和多尺度训练功能,使其在轻量化(yolov5s仅7MB)与高性能(最高51.2% mAP)间取得平衡,但缺乏正式论文支撑是

guoguozgw的博客 1804

AMEsim不连续处理机制:仿真精度与效率的平衡艺术

本文深入解析AMEsim不连续处理机制在系统仿真中的应用,探讨如何平衡仿真精度与效率。通过液压系统仿真案例,详细介绍了事件检测算法、变步长求解器自适应策略及典型场景优化方法,帮助工程师有效应对仿真中的不连续性问题,提升仿真效率和准确性。

v4w5x6的博客 440

看不懂代码看设计模式

:包括类型参数、实际类型参数的上下限等。

weixin_52034824的博客 1020

stata:stata软件教程(人大十八讲)(1) 第一章 stata入门

第一章 stata入门1.1 安装1.2 启用和退出1.3 打开和查看数据1.4 寻求帮助与网络资源1.5 命令示例1.6 几个环境设置1.7 复习与练习1.8 附录 注:教材为:Stata 统计分析教程 stata软件教程(人大十八讲) 中国人民大学出版社 陈传波 1.1 安装 1.2 启用和退出 1.3 打开和查看数据 1.4 寻求帮助与网络资源 1.5 命令示例 1.6 几个环境设置 1.7 复习与练习 1.8 附录 ...

qq_47805483的博客 1万+

设计模式实战:单例与工厂模式深度解析

设计模式是软件工程中解决特定问题的经典方案,其核心价值在于提升代码复用性和系统可维护性。单例模式通过确保类唯一实例来管理全局资源,在配置管理、日志系统等场景发挥关键作用,其线程安全实现涉及双重检查锁定等并发编程技术。工厂模式体系(简单工厂/工厂方法/抽象工厂)将对象创建逻辑封装,有效降低模块耦合度,特别适合跨平台组件、数据库访问层等需要灵活创建对象的场景。在微服务架构和分布式系统中,合理运用这些模式能显著提升代码质量,如配合依赖注入实现松耦合设计。现代C++新特性为模式实现提供了更优雅的方案,而云原生时代的

weixin_33742618的博客 346

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

设计模式(单例、工厂)

设计模式 创建者模式(帮我们创建对象): 单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式 结构型模式: 适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式 行为型模式: 模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式 创建者模式: 建一个鼠标,汽车,电脑,生产环境都不一样,所以创建者模式多种多样。 单例模式: 保证一个类只有一个实例。并且提供一个访问该实例的全局访问点(提供一个方法来访问这个对象)。

weixin_48832316的博客 226

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

golang 数据库缓存优化

采用分片锁机制( LockShardCount=32 ),通过 playerID % LockShardCount 分散锁竞争。- getOrCreatePlayerCache() 使用双重检查锁定(Double-Checked Locking)模式。缓存分区隔离 :目前所有表数据共享同一缓存结构,未来按业务模块拆分缓存。- 实现 getPlayerLock() 方法为不同玩家分配独立锁,大幅降低锁冲突。- 实现 StartCleaner() 定时清理闲置玩家缓存(默认10分钟)

weixin_41453905的博客 297

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模型--创建型模型

文章目录设计模式摘要设计模式分类设计模式的六大原则单例模式什么是单例适用场景应用场景单例优缺点单例常见创建方式破坏单例模式的三种方式如何防止反射、克隆、序列化对单例模式的破坏开源项目应用实例工厂模式什么是工厂模式工厂模式分类简单工厂模式工厂方法模式抽象工厂模式简单工厂、工厂方法、抽象工厂小结开源项目应用实例建造者模式什么是建造者模式建造者模式通用组成建造者适用场景实际案例建造者模式与抽象工厂模式的...

qq_35892775的博客 1268

大白话说Java设计模式-04-工厂方法模式(业务实战篇)

本文结合支付渠道对接的业务场景详解工厂方法模式的核心实现与实战应用,讲解工厂方法模式的四大核心角色(抽象产品、具体产品、抽象工厂、具体工厂)的设计思路,对比简单工厂、工厂方法、抽象工厂三种模式的适用场景差异,分析工厂方法模式在Spring、MyBatis等框架中的应用案例,帮助开发者掌握如何在业务中灵活运用工厂方法模式解耦对象创建逻辑。

Java后端 | AI智能体应用实战派 | 电脑技能行家 371
上一篇: JBDC批量处理
下一篇: JAVA的网络编程
日依
博客等级 码龄15年 165粉丝 165原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值