Skip to content

Commit 43d9f9c

Browse files
committed
增加部分说明
1 parent 24f4753 commit 43d9f9c

File tree

6 files changed

+75
-97
lines changed

6 files changed

+75
-97
lines changed

hsweb-commons/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# 通用功能模块
2+
实现通用CRUD功能,增删改查,直接继承之.
3+
# 目录介绍
4+
1. [hsweb-commons-controller](hsweb-commons-controller):通用springmvc控制器
5+
1. [hsweb-commons-dao](hsweb-commons-dao):通用dao实现
6+
1. [hsweb-commons-entity](hsweb-commons-entity):通用实体类
7+
1. [hsweb-commons-service](hsweb-commons-service):通用服务类
8+
1. [hsweb-commons-utils](hsweb-commons-utils):工具类
9+
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# 通用实体类模块
2+
集成系统通用的实体类,如 树形结构实体,排序实体,创建信息实体
3+
4+
# 常用实体类
5+
6+
| 类名 | 说明 |
7+
| ------------- |:-------------:|
8+
| [`Entity`](src/main/java/org/hswebframework/web/commons/entity/Entity.java) | 实体类的总接口,用来标识为一个实体类 |
9+
| [`GenericEntity`](src/main/java/org/hswebframework/web/commons/entity/GenericEntity.java) | 提供基本属性的实体类 |
10+
| [`RecordCreationEntity`](src/main/java/org/hswebframework/web/commons/entity/RecordCreationEntity.java) | 可记录创建信息的实体类 |
11+
| [`TreeSortSupportEntity`](src/main/java/org/hswebframework/web/commons/entity/TreeSortSupportEntity.java) | 可排序树形结构实体类 |
12+
13+
# 实体类工厂
14+
作用: 为了增加拓展性,各个地方依赖的实体均为接口,实体实例应该调用[EntityFactory](src/main/java/org/hswebframework/web/commons/entity/factory/EntityFactory.java)
15+
进行实例化。如: `UserEntity user=entityFactory.newInstance(UserEntity.class);`
16+
17+
目标: controller,service 不再依赖具体实体实现类。实现类由 dao和springMvc进行提供
18+
19+
默认工厂实现: [MapperEntityFactory](src/main/java/org/hswebframework/web/commons/entity/factory/MapperEntityFactory.java)
20+
该工厂可注册接口和实现类的映射关系,以及提供默认的实现类创建。
21+
默认的实现类创建逻辑为。`Class.forName("Simple"+interfaceName);`
22+
如:`UserEntity user=entityFactory.newInstance(UserEntity.class)`
23+
如果未注册`UserEntity`对应的实现类,则将尝试创建`UserEntity`同包下的`SimpleUserEntity`类实例
24+
25+
注册接口和实现类映射关系:
26+
27+
方式1: 调用 mapperEntityFactory进行注册
28+
29+
```java
30+
@javax.annotation.Resource
31+
private MapperEntityFactory mapperEntityFactory;
32+
33+
@javax.annotation.PostConstruct
34+
public void init(){
35+
mapperEntityFactory.addMapping(UserEntity.class,new Mapper(CustomUserEntity.class,CustomUserEntity::new));
36+
}
37+
38+
```
39+
40+
方式2: application.yml 配置文件描述
41+
42+
```yaml
43+
entity:
44+
mappings:
45+
- source-base-package: org.hswebframework.web.entity.authorization
46+
target-base-package: com.company.authorization
47+
mapping:
48+
UserEntity: CustomUserEntity
49+
```

hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/RecordCreationEntity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.hswebframework.web.commons.entity;
22

33
/**
4-
* TODO 完成注释
4+
* 记录创建信息的实体类,包括创建人和创建时间。
5+
* 此实体类与行级权限控制相关联:只能操作自己创建的数据
56
*
67
* @author zhouhao
8+
* @since 3.0
79
*/
810
public interface RecordCreationEntity extends Entity {
911
String getCreatorId();

hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/SharedEntity.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/SimpleSharedEntity.java

Lines changed: 0 additions & 57 deletions
This file was deleted.

hsweb-commons/hsweb-commons-entity/src/main/java/org/hswebframework/web/commons/entity/factory/MapperEntityFactory.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
public class MapperEntityFactory implements EntityFactory {
3636
private Map<Class, Mapper> realTypeMapper = new HashMap<>();
3737

38+
public <T extends Entity> MapperEntityFactory(Map<Class<T>, Mapper> realTypeMapper) {
39+
this.realTypeMapper.putAll(realTypeMapper);
40+
}
41+
3842
public <T extends Entity> MapperEntityFactory addMapping(Class<T> target, Mapper<T> mapper) {
3943
realTypeMapper.put(target, mapper);
4044
return this;
@@ -43,6 +47,7 @@ public <T extends Entity> MapperEntityFactory addMapping(Class<T> target, Mapper
4347
@Override
4448
@SuppressWarnings("unchecked")
4549
public <T extends Entity> T newInstance(Class<T> beanClass) {
50+
if (beanClass == null) return null;
4651
Mapper<T> mapper = realTypeMapper.get(beanClass);
4752
if (mapper != null) return mapper.getInstanceGetter().get();
4853
synchronized (beanClass) {
@@ -96,7 +101,15 @@ public Supplier<T> getInstanceGetter() {
96101
}
97102
}
98103

99-
class DefaultInstanceGetter<T extends Entity> implements Supplier<T> {
104+
public static <T extends Entity> Mapper<T> defaultMapper(Class<T> target) {
105+
return new Mapper<>(target, defaultInstanceGetter(target));
106+
}
107+
108+
public static <T extends Entity> Supplier<T> defaultInstanceGetter(Class<T> clazz) {
109+
return new DefaultInstanceGetter<>(clazz);
110+
}
111+
112+
static class DefaultInstanceGetter<T extends Entity> implements Supplier<T> {
100113
Class<T> type;
101114

102115
public DefaultInstanceGetter(Class<T> type) {

0 commit comments

Comments
 (0)