关于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中之外,还有一个重要的作用就是 ...
随机推荐
- APP手机商城系统选择,混合开发与原生开发哪个好?
关于手机APP开发用混合还是原生现在说法不一,有说混合开发好:时间短.费用低.效果也不错,有说原生开发好,原生APP在性能方面比较好.而商城系统中的手机APP用混合开发还是原生开发比较好呢? 最近我参 ...
- Docker进阶-容器监控cAdvisor+InfluxDB+Granfana
概述 前面文章介绍使用docker compose组合应用并利用scale快速对容器进行扩容. 由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的 ...
- 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)
本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程 ...
- js页面reload问题
form表单提交时,action="url" method="get/post" 当ajax提交表单时,原本的ajax post提交 success后 不能 ...
- 随笔编号-04 AngularJS 相关小问题解决方案合集
1 解决 Select选择框遍历时,出现一个空白选项: <select style="width: 20%;margin-left: 5px;height: 31px;" ...
- unity之Layer作用
1.使用layer做分层渲染 创建两个物体 添加AB两个层级 分别为两个物体设置对应的层级 为摄像机选择渲染层次(在这个例子中,取消对B层的渲染) 在游戏界面中,将不会显示B层的游戏对象
- 转载java 8 为什么引入 lambda
转载:https://www.cnblogs.com/keeya/p/11404631.html 在Java8出现之前,如果你想传递一段代码到另一个方法里是很不方便的.你几乎不可能将代码块到处传递,因 ...
- Windows CVE-2019-0708 远程桌面代码执行漏洞复现
Windows CVE-2019-0708 远程桌面代码执行漏洞复现 一.漏洞说明 2019年5月15日微软发布安全补丁修复了CVE编号为CVE-2019-0708的Windows远程桌面服务(RDP ...
- Intellij IDEA在maven项目中添加外部Jar包运行
一. 问题概述 我们知道Intellij IDEA是非常好用的Java语言开发的集成环境.提供了非常多实用的功能,包括了智能代码助手.代码自动提示.代码重构.各种插件等,当然也集成了maven 正常情 ...
- 如何使用React搭建项目
1.首先说明node.js.npm.cnpm分别是做什么的? node.js简单的说 Node.js 就是运行在服务端的 JavaScript,安装了node.js默认安装了npm,可以使用npm - ...