java加载自己写的类_java 自定义类加载器从磁盘或网络加载类
一、編寫自定義類加載器類
package com.mybatis.entity;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* 自定義類加載器
* @author dgw
*
*/
public class MyClassLoader extends ClassLoader{
public Class> getClass(String name) throws ClassNotFoundException {
byte[] data=null;
try {
data = this.loadNetClassFile(name);
} catch (Exception e) {
e.printStackTrace();
}
return super.defineClass(name, data, 0, data.length);
}
/**
* 從磁盤加載
* @param name
* @return
* @throws Exception
*/
public byte[] loadClassFile(String name) throws Exception{
String fileName = name.substring(name.lastIndexOf(".")+1)+".class";
String filePath = "D:"+File.separator+fileName;
File file=new File(filePath);
InputStream input=new FileInputStream(file);
ByteArrayOutputStream baos = inputStreamToBytes(input);
return baos.toByteArray();
}
/**
* 從網絡加載
* @param name
* @return
* @throws Exception
*/
public byte[] loadNetClassFile(String name) throws Exception{
String fileName = name.substring(name.lastIndexOf(".")+1)+".class";
URL url=new URL("http://localhost:8080/"+fileName);
URLConnection openConnection = url.openConnection();
InputStream input=openConnection.getInputStream();
ByteArrayOutputStream baos = inputStreamToBytes(input);
return baos.toByteArray();
}
private ByteArrayOutputStream inputStreamToBytes(InputStream input) throws IOException {
ByteArrayOutputStream baos=new ByteArrayOutputStream();
//必須定義byte數組才能使用InputStream
byte[] data=new byte[1024];
int len=0;//讀取的個數
while((len=input.read(data))!=-1){
baos.write(data,0,len);
}
input.close();
baos.close();
return baos;
}
}
二、編寫測試類
package com.mybatis.entity;
/**
* 自定義類加載器測試類
* @author dgw
*
*/
public class TestMyClassLoader {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
MyClassLoader load=new MyClassLoader();
Class> clazz = load.getClass("com.love.mapper.User");
Object newInstance = clazz.newInstance();
System.out.println(newInstance);
}
}
三、需要加載的類User類
package com.love.mapper;
public class User {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "自定義類加載器加載類,User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
四、把測試類放到本地磁盤D盤
五、把此時類User.class放到tomcat根目錄root下面
六、測試效果圖
總結
以上是生活随笔為你收集整理的java加载自己写的类_java 自定义类加载器从磁盘或网络加载类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2konline2操作技巧
- 下一篇: 虚拟dom原理是什么