- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java通过cglib动态生成实体bean的操作由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1
2
3
4
5
6
7
8
9
10
|
<
dependency
>
<
groupId
>commons-beanutils</
groupId
>
<
artifactId
>commons-beanutils</
artifactId
>
<
version
>1.9.3</
version
>
</
dependency
>
<
dependency
>
<
groupId
>cglib</
groupId
>
<
artifactId
>cglib-nodep</
artifactId
>
<
version
>3.2.4</
version
>
</
dependency
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
package
com.dym.entity;
import
net.sf.cglib.beans.BeanGenerator;
import
org.apache.commons.collections.map.MultiValueMap;
import
java.lang.reflect.*;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.Iterator;
import
java.util.Map;
/**
* @author: zhaoxu
* @description:
*/
public
class
DynamicBeanEntity {
Object dynamicBean;
Class clazz;
public
DynamicBeanEntity(Map dynAttrMap) {
this
.dynamicBean = generateBean(dynAttrMap);
clazz = dynamicBean.getClass();
}
/**
* 获取所有属性值
*
* @return
* @throws IllegalAccessException
*/
public
Map<String, Object> getValues()
throws
IllegalAccessException {
Map<String, Object> fieldValuesMap =
new
HashMap(
16
);
Field[] fields = clazz.getDeclaredFields();
for
(Field field : fields) {
field.setAccessible(
true
);
Object fieldValue = field.get(dynamicBean);
fieldValuesMap.put(field.getName().split(
"\\$cglib_prop_"
)[
1
], fieldValue);
}
return
fieldValuesMap;
}
/**
* 获取动态bean所有方法信息
*
* @return
*/
public
MultiValueMap getMethods() {
MultiValueMap map =
new
MultiValueMap();
Method[] methods = clazz.getMethods();
for
(Method method : methods) {
Type[] genericParameterTypes = method.getGenericParameterTypes();
if
(genericParameterTypes.length >
0
) {
for
(Type type : genericParameterTypes) {
map.put(method.getName(), type);
}
}
else
{
map.put(method.getName(),
null
);
}
}
return
map;
}
/**
* 执行某个方法
*
* @param methodName
* @param parameters
* @return
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws NoSuchMethodException
*/
public
Object executeMethod(String methodName, Object... parameters)
throws
InvocationTargetException, IllegalAccessException, NoSuchMethodException {
ArrayList<Class> paramTypeList =
new
ArrayList();
for
(Object paramType : parameters) {
paramTypeList.add(paramType.getClass());
}
Class[] classArray =
new
Class[paramTypeList.size()];
Method method = clazz.getMethod(methodName, paramTypeList.toArray(classArray));
Object invoke = method.invoke(dynamicBean, parameters);
return
invoke;
}
/**
* 设置属性值
*
* @param property
* @param value
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public
void
setValue(String property, Object value)
throws
NoSuchFieldException, IllegalAccessException {
Field declaredField = clazz.getDeclaredField(
"$cglib_prop_"
+ property);
declaredField.setAccessible(
true
);
declaredField.set(dynamicBean, value);
}
/**
* 获取属性值
*
* @param property
* @return
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public
Object getValue(String property)
throws
NoSuchFieldException, IllegalAccessException {
Field declaredField = clazz.getDeclaredField(
"$cglib_prop_"
+ property);
declaredField.setAccessible(
true
);
Object value = declaredField.get(dynamicBean);
return
value;
}
public
Object getEntity() {
return
this
.dynamicBean;
}
/**
* 利用cglib的BeanGenerator创建对象
*
* @param dynAttrMap
* @return
*/
private
Object generateBean(Map dynAttrMap) {
BeanGenerator generator =
new
BeanGenerator();
Iterator iterator = dynAttrMap.keySet().iterator();
while
(iterator.hasNext()) {
String key = iterator.next().toString();
generator.addProperty(key, (Class) dynAttrMap.get(key));
}
return
generator.create();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package
com.dym.attr;
import
com.dym.entity.DynamicBeanEntity;
import
org.apache.commons.collections.map.MultiValueMap;
import
java.lang.reflect.InvocationTargetException;
import
java.util.HashMap;
import
java.util.Map;
/**
* @author: zhaoxu
* @description:
*/
public
class
test {
public
static
void
main(String[] args)
throws
NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
// 设置属性们,默认16
HashMap propertyMap =
new
HashMap(
16
);
propertyMap.put(
"name"
, String.
class
);
propertyMap.put(
"age"
, Integer.
class
);
propertyMap.put(
"height"
, Double.
class
);
// 生成动态 Entity
DynamicBeanEntity bean =
new
DynamicBeanEntity(propertyMap);
//设置属性值
bean.setValue(
"name"
,
"zx"
);
bean.setValue(
"age"
,
22
);
bean.setValue(
"height"
,
175.0
);
//获取属性值
Map<String, Object> values = bean.getValues();
//获取可执行的方法
MultiValueMap methods = bean.getMethods();
//执行某个方法
bean.executeMethod(
"setAge"
,
23
);
System.out.println(
"动态bean的age属性:"
+bean.getValue(
"age"
));
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
package
com.dym.test;
import
com.dym.util.DBUtil;
import
com.dym.util.DynmicEntity;
import
org.springframework.stereotype.Component;
import
java.sql.Connection;
import
java.sql.PreparedStatement;
import
java.sql.ResultSet;
import
java.sql.SQLException;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.Map;
/**
* @author: zhaoxu
* @description:
*/
@Component
public
class
test {
public
static
void
main(String[] args) {
ArrayList<DynmicEntity> beans =
new
ArrayList<>();
Connection conn =
null
;
PreparedStatement prst =
null
;
String sql =
""
;
sql =
"select table_name from information_schema.tables where table_schema=\'public\'"
;
conn = DBUtil.getConn();
try
{
prst = conn.prepareStatement(sql);
ResultSet rs = prst.executeQuery();
while
(rs.next()) {
String tableName = rs.getString(
1
);
Map attrMap =
new
HashMap<>();
String findFieldSql =
"SELECT format_type(a.atttypid,a.atttypmod) as type,a.attname as name, a.attnotnull as notnull \n"
+
"FROM pg_class as c,pg_attribute as a where c.relname = \'"
+ tableName +
"\' and a.attrelid = c.oid and a.attnum>0"
;
PreparedStatement fieldsPrst = conn.prepareStatement(findFieldSql);
ResultSet fieldsRs = fieldsPrst.executeQuery();
while
(fieldsRs.next()) {
String fieldType = fieldsRs.getString(
1
);
String fieldName = fieldsRs.getString(
2
);
attrMap.put(fieldName, Object.
class
);
}
DynmicEntity bean =
new
DynmicEntity(attrMap);
beans.add(bean);
}
}
catch
(SQLException e) {
e.printStackTrace();
}
DBUtil.close(prst, conn);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
package
com.dym.util;
import
java.sql.Connection;
import
java.sql.DriverManager;
import
java.sql.PreparedStatement;
import
java.sql.ResultSet;
import
java.sql.SQLException;
/**
* @author: zhaoxu
* @description:
*/
public
class
DBUtil {
private
final
static
String URL=
"jdbc:postgresql://localhost:5432/dynmic"
;
private
final
static
String NAME=
"postgres"
;
private
final
static
String PASS=
"123456"
;
private
static
Connection conn=
null
;
/**
*
*@Title:DBUtil
*@Description:
*/
public
DBUtil(){
}
/**
*
* @Tiltle getConn
* @return Connection
* @Description:返回连接
*/
public
static
Connection getConn(){
//告诉jvm使用mysql
try
{
//加载驱动,string为驱动名字
Class.forName(
"org.postgresql.Driver"
);
//连接数据库,得到Connection连接
conn=DriverManager.getConnection(URL,NAME,PASS);
//System.out.println("连接数据库: "+conn);
}
catch
(ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(SQLException e){
e.printStackTrace();
}
return
conn;
}
//关闭结果对象集
public
static
void
close(ResultSet rs){
if
(rs!=
null
){
try
{
rs.close();
}
catch
(SQLException e){
e.printStackTrace();
}
}
}
//关闭编译语句对象
public
static
void
close(PreparedStatement prst){
if
(prst!=
null
){
try
{
prst.close();
}
catch
(SQLException e){
e.printStackTrace();
}
}
}
//关闭结果对象集
public
static
void
close(Connection conn){
if
(conn!=
null
){
try
{
conn.close();
}
catch
(SQLException e){
e.printStackTrace();
}
}
}
//对于更新操作关闭资源
public
static
void
close(PreparedStatement prst,Connection conn){
close(prst);
close(conn);
}
//关闭所有
public
static
void
close(ResultSet rs,PreparedStatement prst,Connection conn){
close(rs);
close(prst);
close(conn);
}
}
|
补充:java 反射 json动态转实体类 。
我就废话不多说了,大家还是直接看代码吧~ 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package
test.refect;
public
class
Student {
// 姓名
private
String name;
// 年龄
private
String age;
// 住址
private
String address;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
String getAge() {
return
age;
}
public
void
setAge(String age) {
this
.age = age;
}
public
String getAddress() {
return
address;
}
public
void
setAddress(String address) {
this
.address = address;
}
@Override
public
String toString() {
return
"Student [name="
+ name +
", age="
+ age +
", address="
+ address +
"]"
;
}
public
void
sayHello(Book book){
System.out.println(book.getName());
}
}
|
1
2
3
4
5
6
7
8
9
10
11
|
package
test.refect;
public
class
Book {
private
String name;
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
package
test.refect;
import
java.lang.reflect.Field;
import
java.lang.reflect.Method;
import
java.net.URLDecoder;
import
java.util.Iterator;
import
net.sf.json.JSONObject;
public
class
Main {
public
static
void
main(String[] args)
throws
Exception {
//Student str --> Student 主类
String str =
"test.refect.Student"
;
Class<?> clazz = Class.forName(str);
//Book实体 str --> Book 参数类
String bookStr =
"test.refect.Book"
;
Class<?> bookClazz = Class.forName(bookStr);
//json --> Book 将参数类转为JSONOBJECT
String bookJson =
"{\"name\":\"Java\"}"
;
JSONObject jsonObject=JSONObject.fromObject(bookJson);
//实例化参数类
Object bookInStance = bookClazz.newInstance();
// 通过JSONOBJECT 为参数类赋值
Iterator<?> keys = jsonObject.keys();
while
(keys.hasNext()) {
Object key = keys.next();
Object value = jsonObject.get(key);
// 替换非法字符
String _key = String.valueOf(key).replaceFirst(
"\\W"
,
""
);
Field field = bookClazz.getDeclaredField(_key);
field.setAccessible(
true
);
field.set(bookInStance, URLDecoder.decode(String.valueOf(value),
"UTF-8"
));
field.setAccessible(
false
);
}
//将参数类注入到主类
Method method = clazz.getDeclaredMethod(
"sayHello"
, bookClazz);
//执行主类
method.invoke(clazz.newInstance(), bookInStance);
}
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.
原文链接:https://blog.csdn.net/qq_39898191/article/details/112366508 。
最后此篇关于java通过cglib动态生成实体bean的操作的文章就讲到这里了,如果你想了解更多关于java通过cglib动态生成实体bean的操作的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在尝试使用以下 keytool 命令为我的应用程序生成 keystore : keytool -genkey -alias tomcat -keystore tomcat.keystore -ke
编辑:在西里尔正确解决问题后,我注意到只需将生成轴的函数放在用于生成标签的函数下面就可以解决问题。 我几乎读完了 O'Reilly 书中关于 D3.js 的教程,并在倒数第二页上制作了散点图,但是当添
虽然使用 GraphiQL 效果很好,但我的老板要求我实现一个用户界面,用户可以在其中通过 UI 元素(例如复选框、映射关系)检查呈现给他们的元素并获取数据,这样做将为该人生成 graphql 输入,
我尝试在 Netbean 6.8 中使用 ws-import 生成 Java 类。我想重新生成 jax-ws,因为在 ebay.api.paypalapi 包中发现了一个错误(我认为该错误是由于 Pa
我有一个 perl 脚本,它获取系统日期并将该日期写入文件名。 系统日期被分配给 TRH1 变量,然后它被设置为一个文件名。 $TRH1 =`date + %Y%m%d%H%M`; print "TR
我是 Haskell 的新手,需要帮助。我正在尝试构建一种必须具有某种唯一性的新数据类型,因此我决定使用 UUID 作为唯一标识符: data MyType = MyType { uuid ::
我制作了一个脚本,它可以根据 Mysql 数据库中的一些表生成 XML。 该脚本在 PHP 中运行。 public function getRawMaterials($apiKey, $format
所以这是我的项目中的一个问题。 In this task, we will use OpenSSL to generate digital signatures. Please prepare a f
我在 SAS LIFEREG 中有一个加速故障时间模型,我想绘制它。因为 SAS 在绘图方面非常糟糕,我想实际重新生成 R 中曲线的数据并将它们绘制在那里。 SAS 提出了一个尺度(在指数分布固定为
我正在为 Django 后端制作一个样板,并且我需要能够使它到达下一个下载它的人显然无法访问我的 secret key 的地方,或者拥有不同的 key 。我一直在研究一些选项,并在这个过程中进行了实验
我正在创建一个生成采购订单的应用程序。我可以根据用户输入的详细信息创建文本文件。我想生成一个看起来比普通文本文件好得多的 Excel。有没有可以在我的应用程序中使用的开源库? 最佳答案 目前还没有任何
我正在尝试使用 ScalaCheck 为 BST 创建一个 Gen,但是当我调用 .sample 方法时,它给了我 java.lang.NullPointerException。我哪里错了? seal
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我尝试编写一些代码,例如(在verilog中): parameter N = 128; if (encoder_in[0] == 1) begin 23 binary_out = 1;
我正忙于在 Grails 项目中进行从 MySQL 到 Postgres 的相当复杂的数据迁移。 我正在使用 GORM 在 PostGres 中生成模式,然后执行 MySQL -> mysqldump
如何使用纯 XSLT 生成 UUID?基本上是寻找一种使用 XSLT 创建独特序列的方法。该序列可以是任意长度。 我正在使用 XSLT 2.0。 最佳答案 这是一个good example 。基本上,
我尝试安装.app文件,但是当我安装并单击“同步”(在iTunes中)时,我开始在设备上开始安装,然后停止,这是一个问题,我不知道在哪里,但我看到了我无法解决的奇怪的事情: 最佳答案 似乎您没有在Xc
自从我生成 JavaDocs 以来已经有一段时间了,我确信这些选项在过去 10 年左右的时间里已经得到了改进。 我能否得到一些有关生成器的建议,该生成器将输出类似于 .Net 文档结构的 JavaDo
我想学习如何生成 PDF,我不想使用任何第三方工具,我想自己用代码创建它。到目前为止,我所看到的唯一示例是我通过在第 3 方 dll 上打开反射器查看的代码,以查看发生了什么。不幸的是,到目前为止我看
我正在从 Epplus 库生成 excel 条形图。 这是我成功生成的。 我的 table 是这样的 Mumbai Delhi Financial D
我是一名优秀的程序员,十分优秀!