关于ClassLoader的使用
了解ClassLoader:
/*
* 了解类的加载器:ClassLoader
*
*/
@Test
public void testClassLoader() {
// 获取到系统类加载器,加载用户自己创建类
ClassLoader loader = ClassLoader.getSystemClassLoader();
System.out.println(loader);
// 获取到扩展类加载器,加载D:\jdk1.6.0_45\jre\lib\ext目录下的jar包
ClassLoader loader2 = loader.getParent();
System.out.println(loader2);
// 引导类加载器,获取不到
ClassLoader loader3 = loader2.getParent();
System.out.println(loader3);
}
// 举例:对于自定义类,是使用系统类加载器加载
String className = "com.atguigu.java.Person";
ClassLoader classLoader = Class.forName(className).getClassLoader();
System.out.println(classLoader);
className = "java.lang.String";
classLoader = Class.forName(className).getClassLoader();
System.out.println(classLoader);
关于ClassLoader加载器的一个使用,需要掌握
包结构:
================================
jdbc.properties:
jdbc.user=root
jdbc.password=root
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/jdbc1
#jdbc.user=scott
#jdbc.password=tiger
#jdbc.driverClass=oracle.jdbc.driver.OracleDriver
#jdbc.jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521:ORCL001
/*
* 关于ClassLoader加载器的一个使用,需要掌握
*/
@Test
public void testClassLoader1() throws IOException {
// 方式一:读取当前工程下的配置文件jdbc.properties
Properties properties = new Properties();
FileInputStream inStream = new FileInputStream(new File(
"jdbc.properties"));
properties.load(inStream);
String user = properties.getProperty("jdbc.user");
String password = properties.getProperty("jdbc.password");
String driverClass = properties.getProperty("jdbc.driverClass");
String url = properties.getProperty("jdbc.jdbcUrl");
System.out.println("user=" + user + "\npassword=" + password
+ "\ndriverClass=" + driverClass + "\nurl" + url);
System.out.println("============================");
=====================================================
// 方式二:读取src目录下的配置文件
Properties properties2 = new Properties();
// InputStream inputStream =
// ReflectTest.class.getClassLoader().getResourceAsStream("jdbc1.properties");
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("jdbc1.properties");
properties2.load(inputStream);
String user2 = properties2.getProperty("jdbc.user");
String password2 = properties2.getProperty("jdbc.password");
String driverClass2 = properties2.getProperty("jdbc.driverClass");
String url2 = properties2.getProperty("jdbc.jdbcUrl");
System.out.println("user=" + user2 + "\npassword=" + password2
+ "\ndriverClass=" + driverClass2 + "\nurl" + url2);
System.out.println("============================");
===============================================
// 方式三:读包目录下的配置文件
Properties properties3 = new Properties();
// InputStream inputStream2 = this.getClass().getClassLoader()
// .getResourceAsStream("com/atguigu/java/jdbc2.properties");
InputStream inputStream2 = this.getClass().getClassLoader()
.getResourceAsStream("com\\atguigu\\java\\jdbc2.properties");
properties3.load(inputStream2);
String user3 = properties3.getProperty("jdbc.user");
String password3 = properties3.getProperty("jdbc.password");
String driverClass3 = properties3.getProperty("jdbc.driverClass");
String url3 = properties3.getProperty("jdbc.jdbcUrl");
System.out.println("user=" + user3 + "\npassword=" + password3
+ "\ndriverClass=" + driverClass3 + "\nurl" + url3);
}
关于ClassLoader的使用的更多相关文章
- 使用自定义 classloader 的正确姿势
详细的原理就不多说了,网上一大把, 但是, 看了很多很多, 即使看了jdk 源码, 说了罗里吧嗦, 还是不很明白: 到底如何正确自定义ClassLoader, 需要注意什么 ExtClassLoade ...
- Atitti 载入类的几种方法 Class.forName ClassLoader.loadClass 直接new
Atitti 载入类的几种方法 Class.forName ClassLoader.loadClass 直接new 1.1. 载入类的几种方法 Class.forName ClassLo ...
- java笔记--理解java类加载器以及ClassLoader类
类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...
- Class.forName和ClassLoader.loadClass等
Class类 首先,Class类里可以记载所有类的属性.方法等信息.这个也就是运行时类别标记,它记录了所有的对象(比如int,MyClass,void,数组等等)对应的类信息. Class对象 JVM ...
- Java ClassLoader 原理详细分析(转)
转载自:http://www.codeceo.com/article/java-classloader.html 一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管 ...
- [Tomcat] Tomcat的classloader
定义 同其他服务器应用一样,tomcat安装了各种classloader(classes that implement java.lang.ClassLoader) Bootstrap | Syste ...
- java中Class.forName("xxx")和ClassLoader().loadClass("xxx")的区别
一.首先,查看Class类中的forName方法,可以发现有如下三个方法,但是我们通常用的是只有一个参数的方法. 简单介绍一下这三个方法: 第一个方法Class.forName("xxx&q ...
- java.lang.Class.forName(String name, boolean initialize, ClassLoader loader)方法
描述 Java.lang.Class.forName(String name, boolean initialize, ClassLoader loader) 方法返回与给定字符串名的类或接口的Cla ...
- 深入分析Java ClassLoader原理
一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...
- 深入分析ClassLoader
首先介绍下ClassLoader: ClassLoader顾名思义就是类加载器,负责将Class加载到JVM中,事实上ClassLoader除了能将Class加载到JVM中之外,还有一个重要的作用就是 ...
随机推荐
- poj3415_Common Substrings
题意 给定两个字符串,求长度大于等于k的公共子串数. 分析 将两个字符串中间加个特殊字符拼接,跑后缀数组. 将题目转化为对每一个后缀求\(\sum_{j=1}^{i-1}lcp(i,j)\),且后缀\ ...
- 常见rpm包和yum包命令
1.rpm包 在 安装.升级.卸载服务程序时要考虑到其他程序.库的依赖关系,在进行校验.安装. 卸载.查询.升级等管理软件操作时难度都非常大. RPM 机制则为解决这些问题而设计的.RPM 有点像 W ...
- 12款好用超赞的国外搜索资源网站 ,开发者们的标配,你都知道吗?不知道就OUT了
简介 看了 看了网上有好多推荐插件的文章,很少有推荐搜索资源网站,于是今天决定推荐一波搜索资源网站.这些网站带给我开阔视眼增长知识.所以在这里整理一下,分享给朋友和博友们. 学习技术过程我们经常需要使 ...
- Jmeter发送post请求报错Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported
常识普及: Content-type,在Request Headers里面,告诉服务器,我们发送的请求信息格式,在JMeter中,信息头存储在信息头管理器中,所以在做接口测试的时候,我们维护Conte ...
- unity之初级必备知识
C#中有两种常见类型:值类型,引用类型.值类型存放在内存中栈里,引用类型在内存中栈里存放引用,实际存放在内存中的堆里.值类型继承自System.ValueType.System.ValueType继承 ...
- unity编辑器扩展_05(删除游戏对象并具有撤回功能)
代码: [MenuItem("Tools/Delete",false,1)] static void Delete() { GameObject[] go ...
- [Python] 将视频转成ASCII符号形式、生成GIF图片
一.简要说明 简述:本文主要展示将视频转成ASCII符号形式展示出来,带音频. 运行环境:Win10/Python3.5. 主要模块: PIL.numpy.shutil. [PIL]: 图像处理 [n ...
- Synchronized机制下偏向锁、轻量级锁、重量级锁的适用场景
上次总结了Synchronized机制下的锁的种类和原理,这次总结一下几种锁的适用场景. 偏向锁 一个线程获取某个对象的偏向锁的成本是很低的,只需把对象头的偏向线程id改为自己就好,如果偏向线程id已 ...
- CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装
CentOS 7 下 JDK1.8+Maven+Nginx+MySql+Git+Redis环境安装 安装目录准备 新建data目录,用来放下载的软件 mkdir -p /data 切换到该data目录 ...
- C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性
系列目录 [已更新最新开发文章,点击查看详细] 本篇主要介绍如何获取单文件/模型下单个构建的属性信息. 请求地址:GET https://api.bimface.com/data/v2/fil ...