业务存在不同枚举值对应不同的赋值操作,可以定义一个赋值操作的顶层接口
Create.java
不同枚举值实现自己的方法
CreateMode.java
将枚举类作为对象封装在传入参数中
CreateInfo.java
定义此类枚举的顶层接口,@JsonValue用于前端入参的序列化
IEnumType.java
请求结构体会通过对应的枚举值调用自己Override的方法
如果使用mybatis作为jdbc框架,建议配置mybatis的枚举序列化器
业务存在不同枚举值对应不同的操作,首先定义枚举类
CreateMode.java
定义顶层抽象类,封装公共方法,定义抽象方法,定义抽象类的key
GenericCreate.java
抽象类的多实现
DirectInfo.java
FactoryInfo.java
FunctionalInfo.java
ReflectInfo.java
为什么返回枚举常量
将这些多实现类的对象放入map集合里。
实现InitializingBean, DisposableBean 接口,加载交由springboot接管。
map里存在唯一kv对应(也是通过对应枚举值寻找对应实现类并调用对应方法,参考 HANDLER_COMPONENT_MAP)
Function<T,R> 函数式调用 可以使代码更简略(参考 HANDLER_MAP)
GenericContext.java
FactoryBean是springboot提供的一个动态实例化bean的一个接口,这是一个对通用接口的代理封装
CurrencyFactoryBean.java
提供注解,用于继承同一接口的多实现类,注意:这些实现类上没有@Component注解
FactoryBeanCreate.java
顶层接口
Info.java
接口类的实现
DirectInfo.java
FactoryInfo.java
FunctionalInfo.java
ReflectInfo.java
工厂模式生产对应的bean
CreateModeFactory.java //通过bean实现,不需要关注接口
CreateModeInterfaceFactory.java //通过接口实现,但是需实现InvocationHandler
InfoInvocationHandler.java //实现InvocationHandler
serviceLoader 是 JAVA的SPI特性,外部加载类模板,通过META-INFO/service下的文件进行配置可进行加载的模板类
org.suki.design.mode.interfaces.Info
调用方式
通用Bean工厂,需搭配 @FactoryBeanCreate使用
GenericBeanFactory.java
用于参数在各种上下文之间传递,对于每一层调用进行切面,在切面的时候进行上下文配置并传递(控制层/服务层1/服务层2...)
这里的示例是放在请求的header里的某一个字段在请求体进入的时候set,然后在返回的过程中remove
TextContext.java
TextInterceptor.java
WebConfig.java