当前位置: 代码迷 >> 综合 >> 解耦,获取jar包中的数据
  详细解决方案

解耦,获取jar包中的数据

热度:7   发布时间:2024-01-20 17:45:35.0

需求:获取自定义jar包中某个方法的执行日志信息

需要打包的jar中:

定义接口,日志记录

/*** @author * @version 1.0* @description 日志记录* @date 2021/2/28 16:12*/
public interface LogRecord {/*** 发送日志* @param msg*/void sendInfoLog(String msg);/*** 发送日志* @param msg*/void sendErrorLog(String msg);
}

外部要调用的方法


/*** @author * @version 1.0* @description TODO* @date 2021/2/28 16:14*/
public class TaskExec {public static void t4(LogRecord t) throws InterruptedException {t.sendInfoLog("start t4");for (int i = 0; i < 10; i++) {Thread.sleep(1000);t.sendInfoLog("t4================== i="+i);}t.sendInfoLog("end t4");}}

要引入这个jar的项目

实现这个接口,先给个默认实现,因为后期你可能不再需要这些日志了

/*** @author * @version 1.0* @description 默认实现* @date 2021/3/1 21:12*/
public class DefaultLogRecord implements LogRecord {@Overridepublic void sendInfoLog(String s) {}@Overridepublic void sendErrorLog(String s) {}
}

定义真正要操作的类,这里只把日志放在内存中

/*** @author * @version 1.0* @description 默认实现* @date 2021/3/1 21:12*/
public class MyDefaultLogRecord extends DefaultLogRecord {private List<String> logs=new ArrayList<>();@Overridepublic void sendInfoLog(String s) {logs.add(s);}@Overridepublic void sendErrorLog(String s) {logs.add(s);}public List<String> getLogs() {return logs;}
}

调用引入jar的方法

/*** @author * @version 1.0* @description TODO* @date 2021/2/28 16:44*/
@Component
public class TaskService {public void service3(String taskName) {service.submit(new Runnable() {@Overridepublic void run() {try {MyDefaultLogRecord logRecord = new MyDefaultLogRecord();TaskExec.t4(logRecord);System.out.println(logRecord.getLogs());} catch (InterruptedException e) {e.printStackTrace();}}});}}}

 

  相关解决方案