
springsource
kong-kong
记录流水账
展开
-
MetadataReader
MetadataReader/** * Simple facade for accessing class metadata, * as read by an ASM {@link org.springframework.asm.ClassReader}. * * @author Juergen Hoeller * @since 2.5 */public interface MetadataReader { /** * Return the resource reference fo原创 2021-09-14 23:52:29 · 328 阅读 · 0 评论 -
bean名称重复逻辑
直接标注在类上OtherServiceOtherService的beanname=userService@Service("userService")public class OtherService { public void message(){ System.out.println("OtherService Message ! "); }}UserService@Service("userService")public class UserService { publ原创 2021-09-13 18:05:34 · 441 阅读 · 0 评论 -
spring-alias-别名逻辑
配置类@ComponentScan(value = "com.kq.quickstart")public class AppConfig { @Bean({"aliasService", "aliasService1", "aliasService2"}) public AliasService getAliasService(){ return new AliasService(); }}ConfigurationClassPostProcessorConfigurationCla原创 2021-09-11 15:15:35 · 320 阅读 · 0 评论 -
spring5.3.9 - 程序启动 - 中文注释 - 编译乱码
编译乱码源码加了中文注释后,重新启动,gradle编译的时候乱码idea 已经全部调整utf-8乱码的时候,idea都是utf-8编码的解决方法idea64.exe.vmoptions# 加下面启动参数-Dfile.encoding=utf-8需要重新启动生效...原创 2021-09-11 10:49:17 · 451 阅读 · 0 评论 -
ApplicationListenerDetector
ApplicationListenerDetector处理用户自定义ApplicationListener注册和销毁类图postProcessAfterInitializationpublic Object postProcessAfterInitialization(Object bean, String beanName) { if (bean instanceof ApplicationListener) { // 是否ApplicationListener类型 // potent原创 2021-09-10 23:01:14 · 444 阅读 · 0 评论 -
ApplicationContextAwareProcessor
ApplicationContextAwareProcessor自动注入Aware相关接口postProcessBeforeInitializationpublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (!(bean instanceof EnvironmentAware || bean instanceof EmbeddedValueReso原创 2021-09-10 22:38:04 · 301 阅读 · 0 评论 -
spring-5.3.9 源码环境搭建
clone version:5.3.9git clone -b v5.3.9 https://github.com/spring-projects/spring-framework.git原创 2021-09-10 21:13:30 · 500 阅读 · 0 评论 -
DynamicRoutingDataSource原理
Datasource@Bean(name = "order") public DataSourceProxy masterDataSourceProxy(@Qualifier("originOrder") DataSource dataSource) { return new DataSourceProxy(dataSource); } @Bean(name = "storage") public DataSourceProxy storageDataSo原创 2021-07-14 13:38:55 · 3507 阅读 · 1 评论 -
@Import、@ImportResource 实现
Importpublic @interface Import { /** * {@link Configuration}, {@link ImportSelector}, {@link ImportBeanDefinitionRegistrar} * or regular component classes to import. */ Class<?>[] value();}ImportSelectorpublic interface ImportSelec原创 2020-10-19 21:42:33 · 556 阅读 · 1 评论 -
PostProcessorRegistrationDelegate处理BeanFactoryPostProcessor
AbstractApplicationContext.refresh@Overridepublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 准备刷新 Prepare this context for refreshing. prepareRefresh(); //下面一句 当然,这里说的 Bean 还没有初始化,只原创 2020-09-29 19:27:26 · 1586 阅读 · 0 评论 -
Spring默认初始化的BeanPostProcess
调用图AnnotationConfigUtilspublic static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors( BeanDefinitionRegistry registry, @Nullable Object source) { //从registry里得到beanFactory DefaultListableBeanFactory beanFactory = unwrapDe.原创 2020-09-08 19:09:57 · 652 阅读 · 0 评论 -
@Resource注入-CommonAnnotationBeanPostProcessor
CommonAnnotationBeanPostProcessorprotected Object getResource(LookupElement element, @Nullable String requestingBeanName) throws NoSuchBeanDefinitionException { if (StringUtils.hasLength(element.mappedName)) { //优先处理mappedName return th..原创 2020-09-04 17:13:36 · 500 阅读 · 0 评论 -
@Autowired注入源码-AutowiredAnnotationBeanPostProcessor
大概流程图AbstractBeanFactoryif (mbd.isSingleton()) { //是否单例 注意下面是否先执行()-> 代码 也就是ObjectFactorysharedInstance = getSingleton(beanName, () -> { //单例情况下 这里会把单例实例放到一级缓存 先调用getSingleton 然后调用createBean try { return createBean(beanName,原创 2020-08-31 19:36:21 · 437 阅读 · 0 评论 -
InitializingBean源码实现原理
spring的init方法调用有以下3种:1.实现InitializingBean2. 配置init-method(xml配置)3. 使用注解@PostConstruct本文通过这种方式启动: ApplicationContext context = new AnnotationConfigApplicationContext(SpringApplication.class);调用先后顺序@PostConstruct > InitializingBean > in.原创 2020-06-23 16:31:18 · 705 阅读 · 0 评论 -
SimpleCommandLineArgsParser命令行解析
class SimpleCommandLineArgsParser { public CommandLineArgs parse(String... args) { // --priority1=program-agrs CommandLineArgs commandLineArgs = new CommandLineArgs(); for (String arg : args) { if (arg.startsWith("--")) { // 以--开头 String o..原创 2020-06-11 16:40:44 · 633 阅读 · 0 评论 -
spring源码之Environment
SpringApplicationpublic ConfigurableApplicationContext run(String... args) { ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments); //准备好了Environment,此刻Environment中都有哪些配置参数 configureIgnoreBeanInfo(environm.原创 2020-06-11 16:04:24 · 385 阅读 · 0 评论 -
@PropertySource解析原理
关键类ConfigurationClassParser# ConfigurationClass 标注@Configuration注解的类@Nullable protected final SourceClass doProcessConfigurationClass(ConfigurationClass configClass, SourceClass sourceClass) throws IOException { if (configClass.getMetadata...原创 2020-06-10 19:32:09 · 1134 阅读 · 0 评论 -
springboot 加载 META-INF/spring.factories
用户应用程序ApplicationConfigurableApplicationContext context = SpringApplication.run(NacosSpringBootYamlApplication.class, args);SpringApplication类public static ConfigurableApplicationContext ...原创 2020-02-25 20:08:04 · 6550 阅读 · 0 评论 -
PathMatchingResourcePatternResolver 读取所有class文件
PathMatchingResourcePatternResolver 根据包路径得到所有匹配的类路径protected Set<Resource> doFindAllClassPathResources(String path) throws IOException { Set<Resource> result = new LinkedHashSet...原创 2019-12-10 18:20:45 · 1524 阅读 · 0 评论 -
ConfigurationClassPostProcessor源码
负责解析处理所有@Configuration标签类,主要流程在ConfigurationClassParser中进行原创 2020-10-13 18:26:18 · 359 阅读 · 1 评论 -
ListableBeanFactory
Extension of the {@link BeanFactory} interface to be implemented by bean factories* that can enumerate all their bean instances, rather than attempting bean lookup* by name one by one as requested ...原创 2018-11-21 22:35:36 · 369 阅读 · 0 评论 -
ApplicationContext refresh逻辑
public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext, DisposableBean {@Overridepublic void setParent(ApplicationContext parent) ...原创 2018-11-24 00:00:05 · 385 阅读 · 0 评论 -
BeanPostProcessor
public interface BeanPostProcessor { /** * Apply this BeanPostProcessor to the given new bean instance <i>before</i> any bean * initialization callbacks (like InitializingB...原创 2018-12-01 12:31:45 · 320 阅读 · 0 评论 -
AOP之Interceptor
Advicepublic interface Advice {}Interceptorpublic interface Interceptor extends Advice {}MethodInterceptor/** * Intercepts calls on an interface on its way to the target. These *...原创 2018-12-03 19:44:17 · 454 阅读 · 0 评论 -
spring源码导入idea
releases: https://github.com/spring-projects/spring-framework/releases git clone https://github.com/spring-projects/spring-framework.gitcd spring-framework#看服务器分支git branch -a#查看本地分支...原创 2018-12-26 00:26:25 · 373 阅读 · 0 评论 -
端口号是否可用
see org.springframework.util.SocketUtilsprivate enum SocketType { TCP { @Override protected boolean isPortAvailable(int port) { try { ServerSocket serverSocket = ServerS...原创 2019-08-15 18:13:48 · 344 阅读 · 0 评论 -
spring StopWatch
import org.junit.Test;import org.springframework.util.StopWatch;import static org.junit.Assert.*;import java.util.concurrent.TimeUnit;/** * StopWatchTest * * @author kq */public cla...原创 2019-08-15 18:36:59 · 312 阅读 · 0 评论 -
MultiValueMap
mport static org.junit.Assert.*;/** * MultiValueMapTest * * @author kq */public class MultiValueMapTest { @Test public void testMultiValueMap(){ MultiValueMap<String,S...原创 2019-08-15 19:02:55 · 1235 阅读 · 0 评论 -
spring源码-BeanFactory
BeanFactory是访问Spring容器的顶层接口public interface BeanFactory { String FACTORY_BEAN_PREFIX = "&"; Object getBean(String name) throws BeansException; <T> T getBean(String name,...原创 2018-11-21 22:35:11 · 271 阅读 · 0 评论