- 博客(15)
- 收藏
- 关注
原创 spring循环依赖流程图
流程图能更好的看到循环依赖的全过程,还有一些面试相关的细节在我的这篇文章里https://blog.csdn.net/weixin_43795033/article/details/109222100
2020-11-25 16:48:29 408
原创 spring中bean的创建过程(doCreateBean方法)
bean的创建过程大部分是在docreateBean里面完成的(为什么这么说?因为在createBean里如果InstantiationAwareBeanPostProcessor的postProcessBeforeInstantiation方法返回了一个bean实例的话createBean方法会直接返回导致不会进入doCreateBean方法,这里插一嘴,一个bean一般情况下被创建的方法调用链:getBean→doGetBean→getSingleton→createBean→doCreateBean)
2020-11-25 09:38:49 845
原创 spring自定义扫描实现
业务需求:自定义一个注解@MyMapping使当spring启动的时候自动扫描到环境中所有加了@MyMapping注解的Controller的方法的url路径,并注册一个拦截器或者过滤器去拦截/忽略这些动态匹配到的路由。首先定义注解@MyMapping@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface MyMapping { String val
2020-11-18 20:20:36 619
原创 spring的bean生命周期之循环依赖的全过程
说明:因为贴代码会让文章变的繁杂,为了更连续的说明,代码就不贴出来了,可以根据下面的入口方法看着笔记去了解这个过程AbstractBeanFactory{public Object getBean(String name) throws BeansException { return this.doGetBean(name, (Class)null, (Object[])null, false);}}---------------------------------.
2020-10-22 15:00:55 377
原创 LockSurport中park()、unpark()和Thread中interrupt()的区别与联系
park()、unpark()简单说明:LockSurport中park()执行时会判断当前线程是否有"许可"(初始化的线程没有"许可"),若没有"许可"则会阻塞(阻塞期间获得"许可"会跳出阻塞且不抛出InterruptedExcetion异常),若有"许可"则会直接跳过阻塞(不抛出InterruptedExcetion异常)执行后续代码。LockSurport中unpark(Thread thread)执行时会给thread一个"许可",多次执行也只有一个"许可"。需注意的点:1. 许可消
2021-09-25 10:31:58 836 6
原创 Thread中interrupt()、interrupted()、isInterrupted()方法区别与介绍
interrupt()方法会将线程中断标识设置为true;interrupted()会返回当前线程中断标识并且把线程中断标识设置成false;isInterrupted()只是返回当前线程中断标识,不做其他操作;Thread.sleep()、Object.wait()等方法再进入时会判断当前线程中断标识是否为false,若为false则会阻塞,且阻塞结束后会将中断标识置位false。若为true则直接跳过并且将中断标识设置为false。两个例子说明:...
2021-09-24 17:30:47 300
原创 spring启动方法refresh()简单注释
public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext { @Override public void refresh() throws BeansException, IllegalStateException { synchronized (t.
2020-10-22 14:49:31 321 2
原创 关于spring中@Import注解的用法
@Import(Class[] value)可以将value的类上的注解引入到使用@Import的类中。-----若@Import(Object.class)中的Object实现了ImportBeanDefinitionRegistrar接口,不管有没有实现接口方法,这个Object对象上的注解都不会带到使用@Import注解的类中。(ImportBeanDefinitionRegistrar有两个重载接口方法,同时实现两个时只会执行三个入参的方法,此方法作为spring注册beanDefiniti.
2020-10-22 14:46:01 342 2
原创 关于@Autowire注解ByName匹配的name是哪个name的问题
传送门:https://mp.csdn.net/console/editor/html/107980120
2020-08-13 15:36:02 1141
原创 spring中bean的name与什么有关
详情见另一篇文章https://mp.csdn.net/console/editor/html/107980120
2020-08-13 15:34:16 998
原创 spring使用@Autowire存在两个同类型bean的时候如何注入以及在spring中bean的名称与什么有关
先上结论:当容器中的bean为单例时,@Autowire为ByType的方式注入,被注入的成员的名称可以任意取名。当容器中的bean存在多个的情况下,@Autowire为ByName的方式注入,ByName是将bean单例池中的key(bean的名字)与被注入的成员变量的名称匹配,而不是与被注入的成员变量的类型匹配。关于单例池中的key(bean的name)与什么有关:如果在类上面加上bean化注解(@service、@controller、@component、@repository.
2020-08-13 15:25:25 7613 6
原创 关于PageHelper的动态代理是向sql注入limit字段还是代理java层的问题
结论:pagehelper是动态代理mybatis的底层拼接sql,而不是从java层处理数据。验证过程:将如下配置加入application.yml文件中,目的是在控制台打印sqlmybatis: mapper-locations: classpath:mapper/*Mapper.xml ##打印sql configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#showSql.
2020-08-10 11:33:04 770
原创 java中静态代码块、普通代码块、静态声明、成员变量声明、构造方法间的执行顺序
public class Test { public static void main(String[] args) { TestA a = new TestA(); }}class TestA { public TestA() { System.out.println("TestA的构造方法"); } { System.out.println("TestA的非静态代码块"); } stat.
2020-08-06 12:42:57 293
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人