Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
schbrain-parent
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Incidents
Environments
Packages & Registries
Packages & Registries
Package Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
framework
schbrain-parent
Commits
f0741e83
Commit
f0741e83
authored
Nov 13, 2023
by
liaozan
🏀
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove BeanCopyUtils convert logic
parent
857174d8
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
4 additions
and
32 deletions
+4
-32
commons/common-util/src/main/java/com/schbrain/common/util/BeanCopyUtils.java
...src/main/java/com/schbrain/common/util/BeanCopyUtils.java
+4
-32
No files found.
commons/common-util/src/main/java/com/schbrain/common/util/BeanCopyUtils.java
View file @
f0741e83
package
com.schbrain.common.util
;
package
com.schbrain.common.util
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.convert.ConverterRegistry
;
import
cn.hutool.core.lang.Singleton
;
import
cn.hutool.core.lang.Singleton
;
import
cn.hutool.core.util.ReflectUtil
;
import
cn.hutool.core.util.ReflectUtil
;
import
com.google.common.base.Joiner
;
import
com.google.common.base.Joiner
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.cglib.beans.BeanCopier
;
import
org.springframework.cglib.beans.BeanCopier
;
import
org.springframework.cglib.core.Converter
;
import
org.springframework.util.ClassUtils
;
import
java.lang.reflect.Type
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
/**
/**
* 注意!!!此类是基于 cglib 实现的
* <p>
* <p>
*
默认的 cglib 只支持同名,同类型的属性转换,本类对此场景进行了增强,具体逻辑见 {@link DefaultConverter}
*
FBI Warning!!!此类是基于 cglib 实现的, cglib 只支持同名,同类型的属性转换
* <p>
* <p>
* 另外
最重要的,
cglib 是浅拷贝,意味着如果是引用类型,修改源对象会导致目标对象的值也被修改,使用时请注意!!!
* 另外 cglib 是浅拷贝,意味着如果是引用类型,修改源对象会导致目标对象的值也被修改,使用时请注意!!!
*
*
* @author liaozan
* @author liaozan
* @since 2022/1/24
* @since 2022/1/24
...
@@ -58,39 +52,17 @@ public class BeanCopyUtils {
...
@@ -58,39 +52,17 @@ public class BeanCopyUtils {
return
null
;
return
null
;
}
}
BeanCopier
copier
=
getCopier
(
source
.
getClass
(),
target
.
getClass
());
BeanCopier
copier
=
getCopier
(
source
.
getClass
(),
target
.
getClass
());
copier
.
copy
(
source
,
target
,
DefaultConverter
.
INSTANCE
);
copier
.
copy
(
source
,
target
,
null
);
return
target
;
return
target
;
}
}
private
static
BeanCopier
getCopier
(
Class
<?>
sourceClass
,
Class
<?>
targetClass
)
{
private
static
BeanCopier
getCopier
(
Class
<?>
sourceClass
,
Class
<?>
targetClass
)
{
String
cacheKey
=
buildCacheKey
(
sourceClass
,
targetClass
);
String
cacheKey
=
buildCacheKey
(
sourceClass
,
targetClass
);
return
Singleton
.
get
(
cacheKey
,
()
->
BeanCopier
.
create
(
sourceClass
,
targetClass
,
tru
e
));
return
Singleton
.
get
(
cacheKey
,
()
->
BeanCopier
.
create
(
sourceClass
,
targetClass
,
fals
e
));
}
}
private
static
String
buildCacheKey
(
Class
<?>
source
,
Class
<?>
target
)
{
private
static
String
buildCacheKey
(
Class
<?>
source
,
Class
<?>
target
)
{
return
CACHE_KEY_JOINER
.
join
(
source
.
getName
(),
target
.
getName
());
return
CACHE_KEY_JOINER
.
join
(
source
.
getName
(),
target
.
getName
());
}
}
/**
* 基于 hutool 实现的转换
*
* @see ConverterRegistry#getConverter(Type, boolean)
*/
private
static
class
DefaultConverter
implements
Converter
{
private
static
final
DefaultConverter
INSTANCE
=
new
DefaultConverter
();
@Override
public
Object
convert
(
Object
value
,
Class
targetType
,
Object
context
)
{
if
(
value
==
null
)
{
return
null
;
}
if
(
ClassUtils
.
isAssignableValue
(
targetType
,
value
))
{
return
value
;
}
return
Convert
.
convertQuietly
(
targetType
,
value
);
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment