如何写一个给自己的框架写一个优雅的Java Config模块(一)

Build设计模式

配置模块化

用build设计模式将配置模块化。

配置的依赖关系管理

主从模式

可以暂时先看下面的主从从模式。

单属性配置

httpSecurity.authorizeRequests().regexMatchers("/url/**").authenticated().regexMatchers("/url2/**").anonymous();

上边的代码authorizeRequests方法返回的是一个ExpressionUrlAuthorizationConfigurer对象,regexMatchers方法返回一个AuthorizedUrl对象,这个对象有很多设置权限的方法,但是这个对象的所有方法能且只能被调用一次。Spring Security用来控制只能被调用一次的方法就是不管调用AuthorizedUrl对象的哪个方法,接着返回ExpressionUrlAuthorizationConfigurer对象。

主从从模式

httpSecurity.sessionManagement().maximumSessions(10).expiredUrl("someurl").and().sessionFixation();

上边的代码分解如下:

SessionManagementConfigurer<HttpSecurity> sessionManagementConfigurer = httpSecurity.sessionManagement();
ConcurrencyControlConfigurer concurrencyControlConfigurer = sessionManagementConfigurer.maximumSessions(10);
concurrencyControlConfigurer = concurrencyControlConfigurer.expiredUrl("someurl");
sessionManagementConfigurer = concurrencyControlConfigurer.and();
sessionManagementConfigurer.sessionFixation();

要有从任何一个子模块回到上一个模块的方式。

使用泛型配置配置的依赖关系

正确使用泛型,可以让一个子模块同时配置到多个类似的父模块。

<http>
	<cors configuration-source-ref="test" ref="test"/>
</http>
<cors configuration-source-ref="test" ref="test"/>

如上,cors这个配置可以同时存在于两个不同的父元素中。
Spring Security中使用了大量的泛型很好的处理了这个问题。

public class CorsConfigurer<H extends HttpSecurityBuilder<H>>
		extends AbstractHttpConfigurer<CorsConfigurer<H>, H> 
public abstract class AbstractHttpConfigurer<T extends AbstractHttpConfigurer<T, B>, B extends HttpSecurityBuilder<B>>
		extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, B>	
public abstract class SecurityConfigurerAdapter<O, B extends SecurityBuilder<O>>
		implements SecurityConfigurer<O, B>

build方法的正确姿势(init,configure)

特定位置预留扩展点,同时提供构建状态的信息。

public final O build() throws Exception {
		if (this.building.compareAndSet(false, true)) {
			this.object = doBuild();
			return this.object;
		}
		throw new AlreadyBuiltException("This object has already been built");
	}
protected final O doBuild() throws Exception {
		synchronized (configurers) {
			buildState = BuildState.INITIALIZING;

			beforeInit();
			init();

			buildState = BuildState.CONFIGURING;

			beforeConfigure();
			configure();

			buildState = BuildState.BUILDING;

			O result = performBuild();

			buildState = BuildState.BUILT;

			return result;
		}
	}

运行时信息

可以直接看Spring Security之Builder sharedObjects这篇文章。

与框架或者中间件的非配置模块交互的正确姿势

//TODO

提供一个配置适配器供用户继承重载

类似Spring Security的WebSecurityConfigurerAdapter,在里面提供的内容如下:

  1. 各个配置项的默认配置
  2. 顶级配置项的配置重载回调方法
  3. 重要配置项的配置方法,比如各种顶级概念的bean
设计一个社区养老健康服务系统的基本Java架构通常会包含几个核心模块: 1. **用户管理模块**:包括用户注册、登录、个人信息管理等功能,可以使用Spring Security等框架实现身份验证。 ```java public class UserService { public User register(String username, String password) { ... } public boolean login(String username, String password) { ... } } ``` 2. **健康档案模块**:存储老年人的医疗记录、疾病史、日常活动数据等,可以利用JPA或Hibernate进行持久化操作。 ```java @Entity class HealthRecord { @Id private Long id; private User user; private Date lastCheckupDate; // getters and setters } ``` 3. **医疗服务预约模块**:允许老人预约医生、理疗师等专业人员的服务,并发送提醒通知。 ```java @Service class AppointmentService { public void scheduleAppointment(User老人, Doctor doctor, Date时间) { ... } public void sendReminder(Appointment appointment) { ... } } ``` 4. **在线咨询服务**:提供实时聊天或视频咨询功能,可以集成第三方通信库如WebRTC或WebSocket。 5. **数据分析与报告**:生成并分析老年人的健康状况趋势报告,可能需要用到Elasticsearch等工具。 6. **安全管理**:保护用户的隐私信息,遵守GDPR等相关法规,通过HTTPS加密传输数据。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/api/**").authenticated() .anyRequest().permitAll(); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈振阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值