效果
mp配置
ss配置
特点
这个Comsumer的入参会是内部的成员
函数式接口执行的标志就是定义的这个接口被执行了
特殊
在SS当中
getRegistry是一个链式调用
实现类似的用组为单位的配置
就是build的嵌套,在框架的初始化中初始化build头部
mp的build是config的多个builder如何实现的呢
主体方法就是成员 返回对应的builder
代码实践
public class Demo {
public static void main(String[] args) {
MainBuilder mainBuilder = new MainBuilder();
// 配置授权规则组
mainBuilder
.authorizeHttpRequests(authorize -> authorize
.requestMatchers("/assets/**", "/login").permitAll()
)
.strategyConfig(strategy -> strategy
.entityBuilder(entity -> entity
.enableLombok()
.enableFileOverride()
)
.controllerBuilder(controller -> controller
.enableRestStyle()
.enableFileOverride()
));
// 构建最终对象
mainBuilder.build();
}
}
public class ControllerBuilder {
public ControllerBuilder enableRestStyle() {
System.out.println("启用 REST 风格");
return this;
}
public ControllerBuilder enableFileOverride() {
System.out.println("启用文件覆盖");
return this;
}
}
public class AuthorizeBuilder {
public AuthorizeBuilder requestMatchers(String... patterns) {
System.out.println("配置路径: " + Arrays.toString(patterns));
return this;
}
public AuthorizeBuilder permitAll() {
System.out.println("允许所有访问");
return this;
}
public AuthorizeBuilder authenticated() {
System.out.println("需要认证");
return this;
}
}
public class EntityBuilder {
public EntityBuilder enableLombok() {
System.out.println("启用 Lombok");
return this;
}
public EntityBuilder enableFileOverride() {
System.out.println("启用文件覆盖");
return this;
}
}
public class MainBuilder {
// 子配置组对象
private AuthorizeBuilder authorizeBuilder = new AuthorizeBuilder();
private StrategyBuilder strategyBuilder = new StrategyBuilder();
// 授权配置入口
public MainBuilder authorizeHttpRequests(Consumer<AuthorizeBuilder> config) {
config.accept(authorizeBuilder);
return this;
}
// 策略配置入口
public MainBuilder strategyConfig(Consumer<StrategyBuilder> config) {
config.accept(strategyBuilder);
return this;
}
// 构建最终对象(此处简化,实际需整合所有配置)
public Object build() {
return new Object();
}
}
public class StrategyBuilder {
private EntityBuilder entityBuilder = new EntityBuilder();
private ControllerBuilder controllerBuilder = new ControllerBuilder();
// 实体配置入口
public StrategyBuilder entityBuilder(Consumer<EntityBuilder> config) {
config.accept(entityBuilder);
return this;
}
// Controller 配置入口
public StrategyBuilder controllerBuilder(Consumer<ControllerBuilder> config) {
config.accept(controllerBuilder);
return this;
}
}