spring bean 初始化过程涉及到很多 spring 的扩展接口,源码必懂。 getBean 源码位置: org.springframework.beans.factory.BeanFactory#getBean 1 2 3 4 5 // BeanFactory 是接口,由 AbstractBeanFactory 类来实现 @Override public Object getBean(String name) throws BeansException { return doGetBean(name, null, null, false); } 源码位置: org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean 1 2
spring security 的代码比较难,之前我在 ProcessOn 上做了源码导读,所以这里只说关键点。 理解关键点 认证的逻辑有多个 filter 来完成,常用的 filter 如 UsernamePasswor
jdk 基于 8 版本 在平时的开发中,我们经常会用到 ThreadLocal,本质是一个 Map<Thread, V> 结构。
使用示例 例子来自于官网 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler"); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } 说明: WebSocketConfigurer 配置 websocket。 WebSocketHandler 处
在 spring 中,最常用的两种扩展就是 BeanFactoryPostProcessor 和 BeanPostProcessor, 当然还有其他的扩展,比如 ApplicationListener, SpringApplicationRunListener 等等。 BeanFactoryPostProcessor 源码位置: org.springframework.beans.factory.config.BeanFactoryPostProcessor 1 2 3 4 5 6 @FunctionalInterface public interface BeanFactoryPostProcessor { // 可以用 beanFactory 来修改 beanDefinition, 注册 singletonBean void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException; }
自动配置类 源码位置: org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // 导入 tomcat,jetty,undertow 的配置 @Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, ServletWebServerFactoryConfiguration.EmbeddedTomcat.class, ServletWebServerFactoryConfiguration.EmbeddedJetty.class, ServletWebServerFactoryConfiguration.EmbeddedUndertow.class }) public class ServletWebServerFactoryAutoConfiguration { @Bean public ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(ServerProperties