Java使用poi从数据库读取数据生成Excel表格
想要使用POI操作以xsl结尾的Excel,首先要下载poi相关的jar包,用到的jar有:
项目结构如下:
依赖如下:
<!-- 下载excel相关依赖 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
代码:
BaseExportExcel.java
package exportExcel; import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.IndexedColors; import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List; public class BaseExportExcel {
private String title;// 显示导出表的标题
private String[] rowName;// 导出表的列名
private List<Object[]> dataList; // 填充的数据
private String path;// 导出的路径 public BaseExportExcel(String title, String[] rowName, List<Object[]> dataList, String path) {
super();
this.title = title;
this.rowName = rowName;
this.dataList = dataList;
this.path = path;
} // 导出数据
public void export() throws Exception {
try {
HSSFWorkbook workbook = new HSSFWorkbook();// 创建工作簿对象
HSSFSheet sheet = workbook.createSheet(title); // 产生表格标题行,第一行
HSSFRow rowm1 = sheet.createRow(0);
HSSFCell cell1 = rowm1.createCell(0);
// rowm1.setHeight((short) (25 * 30));//设置第一行的高度 // sheet样式定义[getcolumnTopStyle()/getStyle()均为自定义方法-在下面-可扩展]
HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);
HSSFCellStyle style = this.getStyle(workbook); // 定义所需要的列数
int columnNum = rowName.length;
HSSFRow rowRowName1 = sheet.createRow(0);
HSSFRow rowRowName2 = sheet.createRow(1);
rowRowName1.setHeight((short) (15 * 15));// 设置第一行高度
rowRowName2.setHeight((short) (20 * 25));// 设置第二行高度 // 将列头设置到sheet单元格中
for (int n = 0; n < columnNum; n++) {
// 设置第一行的值
HSSFCell cellRowName1 = rowRowName1.createCell(n); // 创建列头对应个数的单元格
cellRowName1.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型
HSSFRichTextString text1 = new HSSFRichTextString(rowName[n]);
cellRowName1.setCellValue(text1); // 设置列头单元格的值
cellRowName1.setCellStyle(columnTopStyle); // 设置列头单元格样式
// 设置第二行的值
HSSFCell cellRowName2 = rowRowName2.createCell(n); // 创建列头对应个数的单元格
cellRowName2.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型
HSSFRichTextString text2 = new HSSFRichTextString(rowName[n]);
cellRowName2.setCellValue(text2); // 设置列头单元格的值
cellRowName2.setCellStyle(columnTopStyle); // 设置列头单元格样式
} // 合并业务属性后设置合并单元格的值
HSSFRow rowywsx = sheet.getRow(0);
HSSFCell cellywsx = rowywsx.getCell(6);
cellywsx.setCellValue("业务属性"); // 合并技术属性后设置合并单元格的值
HSSFRow rowjssx = sheet.getRow(0);
HSSFCell celljssx = rowjssx.getCell(11);
celljssx.setCellValue("技术属性"); // 合并重复组后设置合并单元格的值
HSSFRow rowjcfz = sheet.getRow(0);
HSSFCell celljcfz = rowjcfz.getCell(18);
celljcfz.setCellValue("重复组"); // 将前三列合并
sheet.addMergedRegion(new CellRangeAddress(2, 6, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(2, 6, 1, 1));
sheet.addMergedRegion(new CellRangeAddress(2, 6, 2, 2)); // 将第一行与第二行合并
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); // 合并业务属性
sheet.addMergedRegion(new CellRangeAddress(0, 0, 6, 10)); // 合并技术属性
sheet.addMergedRegion(new CellRangeAddress(0, 0, 11, 16)); // 合并说明
sheet.addMergedRegion(new CellRangeAddress(0, 1, 17, 17)); // 合并重复组
sheet.addMergedRegion(new CellRangeAddress(0, 0, 18, 20)); // 将查询出的数据设置到sheet对应的单元格中
for (int i = 0; i < dataList.size(); i++) { Object[] obj = dataList.get(i);// 遍历每个对象
HSSFRow row = sheet.createRow(i + 2);// 创建所需的行数 row.setHeight((short) (25 * 35)); // 设置第三行开始的单元格高度 for (int j = 0; j < obj.length; j++) {
HSSFCell cell = null; // 设置单元格的数据类型
cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
if (!"".equals(obj[j]) && obj[j] != null) {
cell.setCellValue(obj[j].toString()); // 设置单元格的值
}
cell.setCellStyle(style); // 设置单元格样式
}
} // 让列宽随着导出的列长自动适应
for (int colNum = 0; colNum < columnNum; colNum++) {
int columnWidth = sheet.getColumnWidth(colNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
HSSFRow currentRow;
// 当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}
if (currentRow.getCell(colNum) != null) {
HSSFCell currentCell = currentRow.getCell(colNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
if (colNum == 0) {
sheet.setColumnWidth(colNum, (columnWidth - 2) * 128);
} else {
sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
} } if (workbook != null) {
try {
FileOutputStream out = new FileOutputStream(path);
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /*
* 列头单元格样式
*/
public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) { // 设置字体
HSSFFont font = workbook.createFont();
// 设置字体大小
font.setFontHeightInPoints((short) 9);
// 字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置字体名字
font.setFontName("Times New Roman");
// 设置样式;
HSSFCellStyle style = workbook.createCellStyle();
// 设置底边框;
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// 设置底边框颜色;
style.setBottomBorderColor(HSSFColor.BLACK.index);
// 设置左边框;
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// 设置左边框颜色;
style.setLeftBorderColor(HSSFColor.BLACK.index);
// 设置右边框;
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置右边框颜色;
style.setRightBorderColor(HSSFColor.BLACK.index);
// 设置顶边框;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 设置顶边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
// 在样式用应用设置的字体;
style.setFont(font);
// 设置自动换行;
style.setWrapText(true);
// 设置水平对齐的样式为居中对齐;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_BOTTOM); // 设置单元格背景颜色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); return style; } /*
* 列数据信息单元格样式
*/
public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
// 设置字体
HSSFFont font = workbook.createFont();
// 设置字体大小
font.setFontHeightInPoints((short) 9);
// 字体加粗
// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置字体名字
font.setFontName("Times New Roman");
// 设置样式;
HSSFCellStyle style = workbook.createCellStyle();
// 设置底边框;
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// 设置底边框颜色;
style.setBottomBorderColor(HSSFColor.BLACK.index);
// 设置左边框;
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// 设置左边框颜色;
style.setLeftBorderColor(HSSFColor.BLACK.index);
// 设置右边框;
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置右边框颜色;
style.setRightBorderColor(HSSFColor.BLACK.index);
// 设置顶边框;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 设置顶边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
// 在样式用应用设置的字体;
style.setFont(font);
// 设置自动换行;
style.setWrapText(true);
// 设置水平对齐的样式为居中对齐;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_BOTTOM); return style; }
}
ExcelGenerate.java
package exportExcel; import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.IndexedColors; import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List; public class BaseExportExcel {
private String title;// 显示导出表的标题
private String[] rowName;// 导出表的列名
private List<Object[]> dataList; // 填充的数据
private String path;// 导出的路径 public BaseExportExcel(String title, String[] rowName, List<Object[]> dataList, String path) {
super();
this.title = title;
this.rowName = rowName;
this.dataList = dataList;
this.path = path;
} // 导出数据
public void export() throws Exception {
try {
HSSFWorkbook workbook = new HSSFWorkbook();// 创建工作簿对象
HSSFSheet sheet = workbook.createSheet(title); // 产生表格标题行,第一行
HSSFRow rowm1 = sheet.createRow(0);
HSSFCell cell1 = rowm1.createCell(0);
// rowm1.setHeight((short) (25 * 30));//设置第一行的高度 // sheet样式定义[getcolumnTopStyle()/getStyle()均为自定义方法-在下面-可扩展]
HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);
HSSFCellStyle style = this.getStyle(workbook); // 定义所需要的列数
int columnNum = rowName.length;
HSSFRow rowRowName1 = sheet.createRow(0);
HSSFRow rowRowName2 = sheet.createRow(1);
rowRowName1.setHeight((short) (15 * 15));// 设置第一行高度
rowRowName2.setHeight((short) (20 * 25));// 设置第二行高度 // 将列头设置到sheet单元格中
for (int n = 0; n < columnNum; n++) {
// 设置第一行的值
HSSFCell cellRowName1 = rowRowName1.createCell(n); // 创建列头对应个数的单元格
cellRowName1.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型
HSSFRichTextString text1 = new HSSFRichTextString(rowName[n]);
cellRowName1.setCellValue(text1); // 设置列头单元格的值
cellRowName1.setCellStyle(columnTopStyle); // 设置列头单元格样式
// 设置第二行的值
HSSFCell cellRowName2 = rowRowName2.createCell(n); // 创建列头对应个数的单元格
cellRowName2.setCellType(HSSFCell.CELL_TYPE_STRING); // 设置列头单元格的数据类型
HSSFRichTextString text2 = new HSSFRichTextString(rowName[n]);
cellRowName2.setCellValue(text2); // 设置列头单元格的值
cellRowName2.setCellStyle(columnTopStyle); // 设置列头单元格样式
} // 合并业务属性后设置合并单元格的值
HSSFRow rowywsx = sheet.getRow(0);
HSSFCell cellywsx = rowywsx.getCell(6);
cellywsx.setCellValue("业务属性"); // 合并技术属性后设置合并单元格的值
HSSFRow rowjssx = sheet.getRow(0);
HSSFCell celljssx = rowjssx.getCell(11);
celljssx.setCellValue("技术属性"); // 合并重复组后设置合并单元格的值
HSSFRow rowjcfz = sheet.getRow(0);
HSSFCell celljcfz = rowjcfz.getCell(18);
celljcfz.setCellValue("重复组"); // 将前三列合并
sheet.addMergedRegion(new CellRangeAddress(2, 6, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(2, 6, 1, 1));
sheet.addMergedRegion(new CellRangeAddress(2, 6, 2, 2)); // 将第一行与第二行合并
sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4));
sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); // 合并业务属性
sheet.addMergedRegion(new CellRangeAddress(0, 0, 6, 10)); // 合并技术属性
sheet.addMergedRegion(new CellRangeAddress(0, 0, 11, 16)); // 合并说明
sheet.addMergedRegion(new CellRangeAddress(0, 1, 17, 17)); // 合并重复组
sheet.addMergedRegion(new CellRangeAddress(0, 0, 18, 20)); // 将查询出的数据设置到sheet对应的单元格中
for (int i = 0; i < dataList.size(); i++) { Object[] obj = dataList.get(i);// 遍历每个对象
HSSFRow row = sheet.createRow(i + 2);// 创建所需的行数 row.setHeight((short) (25 * 35)); // 设置第三行开始的单元格高度 for (int j = 0; j < obj.length; j++) {
HSSFCell cell = null; // 设置单元格的数据类型
cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
if (!"".equals(obj[j]) && obj[j] != null) {
cell.setCellValue(obj[j].toString()); // 设置单元格的值
}
cell.setCellStyle(style); // 设置单元格样式
}
} // 让列宽随着导出的列长自动适应
for (int colNum = 0; colNum < columnNum; colNum++) {
int columnWidth = sheet.getColumnWidth(colNum) / 256;
for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
HSSFRow currentRow;
// 当前行未被使用过
if (sheet.getRow(rowNum) == null) {
currentRow = sheet.createRow(rowNum);
} else {
currentRow = sheet.getRow(rowNum);
}
if (currentRow.getCell(colNum) != null) {
HSSFCell currentCell = currentRow.getCell(colNum);
if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
int length = currentCell.getStringCellValue().getBytes().length;
if (columnWidth < length) {
columnWidth = length;
}
}
}
}
if (colNum == 0) {
sheet.setColumnWidth(colNum, (columnWidth - 2) * 128);
} else {
sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
} } if (workbook != null) {
try {
FileOutputStream out = new FileOutputStream(path);
workbook.write(out);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /*
* 列头单元格样式
*/
public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) { // 设置字体
HSSFFont font = workbook.createFont();
// 设置字体大小
font.setFontHeightInPoints((short) 9);
// 字体加粗
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置字体名字
font.setFontName("Times New Roman");
// 设置样式;
HSSFCellStyle style = workbook.createCellStyle();
// 设置底边框;
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// 设置底边框颜色;
style.setBottomBorderColor(HSSFColor.BLACK.index);
// 设置左边框;
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// 设置左边框颜色;
style.setLeftBorderColor(HSSFColor.BLACK.index);
// 设置右边框;
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置右边框颜色;
style.setRightBorderColor(HSSFColor.BLACK.index);
// 设置顶边框;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 设置顶边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
// 在样式用应用设置的字体;
style.setFont(font);
// 设置自动换行;
style.setWrapText(true);
// 设置水平对齐的样式为居中对齐;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_BOTTOM); // 设置单元格背景颜色
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); return style; } /*
* 列数据信息单元格样式
*/
public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
// 设置字体
HSSFFont font = workbook.createFont();
// 设置字体大小
font.setFontHeightInPoints((short) 9);
// 字体加粗
// font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 设置字体名字
font.setFontName("Times New Roman");
// 设置样式;
HSSFCellStyle style = workbook.createCellStyle();
// 设置底边框;
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
// 设置底边框颜色;
style.setBottomBorderColor(HSSFColor.BLACK.index);
// 设置左边框;
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
// 设置左边框颜色;
style.setLeftBorderColor(HSSFColor.BLACK.index);
// 设置右边框;
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置右边框颜色;
style.setRightBorderColor(HSSFColor.BLACK.index);
// 设置顶边框;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
// 设置顶边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
// 在样式用应用设置的字体;
style.setFont(font);
// 设置自动换行;
style.setWrapText(true);
// 设置水平对齐的样式为居中对齐;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 设置垂直对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_BOTTOM); return style; }
}
生成的excel
Java使用poi从数据库读取数据生成Excel表格的更多相关文章
- Java操作Jxl实现导出数据生成Excel表格数据文件
实现:前台用的框架是Easyui+Bootstrap结合使用,需要引入相应的Js.Css文件.页面:Jsp.拦截请求:Servlet.逻辑处理:ClassBean.数据库:SQLserver. 注意: ...
- 数据库数据生成Excel表格(多用在导出数据)
最近在项目开发中遇到这样一个需求,用户聊天模块产品要求记录用户聊天信息,但只保存当天的,每天都要刷新清空数据,但聊天记录要以Excel的形式打印出来,于是就引出了将数据库的数据导出成Excel表格的需 ...
- C#实现从数据库读取数据到Excel
用第三方组件:NPOI来实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI ...
- 《程序实现》从xml、txt文件里读取数据写入excel表格
直接上码 import java.io.BufferedReader; import java.io.DataInputStream; import java.io.File; import java ...
- Java导出数据生成Excel表格
事先准备: 工具类: package com.wazn.learn.util.export; import java.sql.Connection; import java.sql.DriverMan ...
- 一个php文件就可以把数据库的数据导出Excel表格
数据库内容太多,复制粘贴太麻烦?那就用代码实现把,把代码写好了,导出还不容易吗,访问即可导出. excel.php <?php error_reporting(E_ALL ^ E_DEPRECA ...
- 从数据库导出数据到excel之POI操作
项目说明: 1:数据库中有两张表,主键关联 2:根据条件查询数据 3:处理为需要的数据封装类型,然后传到导出excel的方法中 <--框架部署就不详谈了,用的spring框架--> 补充: ...
- echarts通过ajax向服务器发送post请求,servlet从数据库读取数据并返回前端
1.echarts的官网上的demo,都是直接写死的随机数据,没有和数据库的交互,所以就自己写了一下,ok,我们开始一步一步走一遍整个流程吧. 就以官网最简单的那个小demo来做修改吧.官网上的小de ...
- Android打开数据库读取数据
打开数据库读取数据 private MyDatabaseHelper dbHelper; dbHelper=new MyDatabaseHelper(this,"List.db", ...
随机推荐
- TensorFlow笔记-01-开篇概述
人工智能实践:TensorFlow笔记-01-开篇概述 从今天开始,从零开始学习TensorFlow,有相同兴趣的同志,可以互相学习笔记,本篇是开篇介绍 Tensorflow,已经人工智能领域的一些名 ...
- asm数据文件迁移(os–>asm)
--添加测试表空间 SQL> create tablespace xff datafile '/u01/oradata/xifenfei.dbf' size 10m autoextend on ...
- OAuth 2.0:Bearer Token、MAC Token区别
Access Token 类型介绍 介绍两种类型的Access Token:Bearer类型和MAC类型 区别项 Bearer Token MAC Token 1 (优点) 调用简单,不需要对请求进行 ...
- JUC集合之 CopyOnWriteArraySet
CopyOnWriteArraySet介绍 它是线程安全的无序的集合,可以将它理解成线程安全的HashSet.有意思的是,CopyOnWriteArraySet和HashSet虽然都继承于共同的父类A ...
- MyBatis持久层框架使用总结 转载
MyBatis持久层框架使用总结 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...
- MySQL5.5.19安装
本文详细介绍了Windows下安装MySQL5.5.19的全过程,希望对初学者有帮助. http://dl.pconline.com.cn/html_2/1/79/id=465&pn=0.h ...
- gdb 调试(设置变量)(六)
一旦使用GDB挂上被调试程序,当程序运行起来后,你可以根据自己的调试思路来动态地在GDB中更改当前被调试程序的运行线路或是其变量的值,这个强大的功能能够让你更好的调试你的程序,比如,你可以在程序的一次 ...
- maven学习(5)-Maven 聚合与继承特性
接着上面的项目, 继承和聚合为了统一管理: 聚合: 有些项目中有很多小模块,可以合并到一起,将多个子项目可以统一管理,可以对user-dao,user-service进行统一管理(maven clea ...
- 小峰mybatis(4)mybatis使用注解配置sql映射器
主流开发还是使用xml来配置:使用注解配置比较快,但是不支持所有功能:有些功能还是得用配置文件: 一.基本映射语句: @Inert @Update @Delete @Select 二.结果集映射语句 ...
- JVM插码之五:Java agent+ASM实战--监控所有方法执行时间
本文建立在对instrumentation和agent有初步的了解的前提下阅读,关于这2个类的讲解在其它文章中. 这是一个maven项目,pom中需要的配置,lib中有asm的jar包 pom.xml ...