【自己动手写类加载器2】覆盖findClass(String name)方法,删除bin目录下的加密的class文件

1、要想实现自己的类加载器能够加载类,需要覆盖findClass(String name)方法,类加载器的loadClass(String name)方法最终调用的还是findClass(String name)。

2、由于类加载器使用的委托机制,先看父类AppClassLoader能不能加载再看自己的类加载器能不能加载,所以要把bin目录下的class文件删掉。

下面是自己写的类加载器,具有加密功能

package com.xiaozhi.myclassloader;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class MyClassLoader extends ClassLoader{
	
	public static void main(String[] args) throws Exception{//生成加密字节码文件
		String srcPath = args[0];
		String destPah = args[1];
		String fileName = srcPath.substring(srcPath.lastIndexOf("\\") + 1);
		destPah = destPah +"\
public void dataRemove(Date date, String fieldName, int maxRemoveCount, String outObjectName, String unitName) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); if (date == null) { Date sDate = new Date(); date = removeDbEjb.rMinDate(outObjectName, unitName); Date eDate = new Date(); logger.info(String.format(" %s-%s -> ReceiveTime %s,%s->%s date=%s", unitName, outObjectName, removeDbEjb.rSecond(sDate, eDate), dateFormat.format(sDate), dateFormat.format(eDate), dateFormat.format(date))); } String inObject = String.format("%s%s%s", entityMap.get(unitName), outObjectName, sdf.format(date)); String outObject = String.format("%s%s", entityMap.get(unitName), outObjectName); long i = removeDbEjb.rSecond(date, new Date()); //控制2年以内数据不迁移. 图纸DocFiles 4年以内 int j = unitName.contains("Doc") && outObjectName.contains("DocFiles") ? 1460 : 730; if (removeDbEjb.rSecond(date, new Date()) > 60 * 60 * 24 * j) { logger.info(String.format("%s StartTime %s, i = %s => %s -----> %s", dateFormat.format(new Date()), dateFormat.format(date), i, outObject, inObject)); dataRemove(date, fieldName, maxRemoveCount, outObject, inObject, unitName); } } public void dataListRemove(Date date, String fieldName, int maxRemoveCount, String outObjectName, String unitName) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); if (date == null) { Date sDate = new Date(); date = removeDbEjb.rMinDate(outObjectName, unitName); Date eDate = new Date(); logger.info(String.format(" %s-%s -> ReceiveTime %s,%s->%s date=%s", unitName, outObjectName, removeDbEjb.rSecond(sDate, eDate), dateFormat.format(sDate), dateFormat.format(eDate), dateFormat.format(date))); } String outObjectNameList = outListMap.get(outObjectName);//"orderNo" String fieldNameList = outFieldNameMap.get(outObjectNameList); String inObject = String.format("%s%s%s", entityMap.get(unitName), outObjectName, sdf.format(date)); String outObject = String.format("%s%s", entityMap.get(unitName), outObjectName); String inObjectList = String.format("%s%s%s", entityMap.get(unitName), outObjectNameList, sdf.format(date)); String outObjectList = String.format("%s%s", entityMap.get(unitName), outObjectNameList); long i = removeDbEjb.rSecond(date, new Date()); //控制2年以内数据不迁移. 图纸DocFiles 4年以内 int j = unitName.contains("Doc") && outObjectName.contains("DocFiles") ? 1460 : 730; if (removeDbEjb.rSecond(date, new Date()) > 60 * 60 * 24 * j) { List<Object> dataList = removeDbEjb.rDataList(outObjectName, date, fieldName, unitName); if (CollectionUtils.isNotEmpty(dataList) && dataList.size() > 0) { logger.info(String.format("%s Line StartTime %s, i = %s => %s -----> %s", dateFormat.format(new Date()), dateFormat.format(date), i, outObjectList, inObjectList)); removeDbEjb.dataReturn(dataList, fieldNameList, outObjectList, inObjectList, unitName, "mySql"); logger.info(String.format("%s Head StartTime %s, i = %s => %s -----> %s", dateFormat.format(new Date()), dateFormat.format(date), i, outObject, inObject)); removeDbEjb.dataReturn(dataList, fieldNameList, outObject, inObject, unitName, "mySql"); } else { logger.info(String.format("%s Query not Find Data %s, i = %s => %s -----> %s", dateFormat.format(new Date()), dateFormat.format(date), i, outObject, inObject)); // dataRemove(date, fieldName, maxRemoveCount, outObject, inObject, unitName); } } },历史数据迁移到mysql的计划,原计划该表保留2年,现建议更改为保留一年。
最新发布
07-26
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值