关于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中之外,还有一个重要的作用就是 ...
随机推荐
- vue 异步加载远程组件(支持编译less语法)
本代码已组件化,可以直接使用. 说明:本组件可以直接解析.vue文件,为了支持less语法解析,在组件中引入less.js,可在less官网下载. 组件代码 <template> < ...
- Windows Server 2008配置系统安全策略
下面学习Windows Server 2008配置系统安全策略 在工作组中的计算机本地安全策略有 用户策略,密码策略,密码过期默认42天 服务账户设置成永不过期,帐户锁定策略,本地策略,审核策略,计算 ...
- 如何处理scrum中未完成的用户故事?
你听过柏林新建机场的故事吗?机场原定2006年开工,2007年启用,但由于机场建设过程中到处出现施工和安全问题,补东墙漏西墙,导致工期一拖再拖,预算一涨再涨,以至于2019年了还没开张,预计开业时间已 ...
- 基于sparksql collect_list的udf定义踩坑
多条collect_list,然后将collect_list的结果concat起来,最初使用的是concat_ws(),但是发现超过4个collect_list就会报错, select concat_ ...
- SSH开发模式——Struts2(第三小节)
struts2框架的知识点,虽然分了几个小节,感觉内容还是挺多的,但是你仅仅是入门了而已,想要进一步地提升自己,你得有一颗持之以恒的学习的心,最后的内容我都将在这篇博客中讲到,所以篇幅可能会有点长,希 ...
- 使用Mybatis-Generator 自动生成代码
前提:已经有SpringBoot的工程,且在上面实现了MyBatis的应用,只不过全是以手动方式创建mapper.xml映射文件.pojo类等. 在POM中添加MyBatis.generator依赖 ...
- 企查查app (二)
企查查app sign算法破解 已删除!!!! 这次我们又找到设备id,现在就只差aXM这个了. 关注小白公众号,小白带你成长.
- mysql/mariadb 初体验
距离申请这个博客号已经过了九个月,思前想后还是把知识沉淀放这里吧,不过初心一样,依旧是 '谨以此文,见证成果'.有 兴趣的话也欢迎大家去我的csdn博客转一转.以下是正文: 1.mysql安装 win ...
- 什么是W3C??
为什么想着写这个博客呢,因为最近准备简历去面试,看到好多公司上面都写着熟悉 w3c ,很纳闷,我是一个新手,w3c是什么呢?没听过!!! 所以就去网上查了: 什么是W3C? W3C 万维网联盟(wor ...
- unity_UGUI养成之路01
1.UGUI_UI之音量设计 2.控制音量音效的开关 实现开和关的互斥点击 实现开与关画面的显示 注意,上图并未选择分组.具体原因博主尚不清楚如果有知道的可以告知一二,谢谢各位!!! 代码: usi ...