Spring
Spring
amadeus_liu2
这个作者很懒,什么都没留下…
展开
-
SpringMvc:为什么不能把controller类放到spring容器而必须放到SpringMvc容器?
而doGetBean方法是会查找父容器的,所以controller中可以注入父容器中的service和dao。因为在扫描Handler方法时,只会在SpringMvc容器中去查找bean 定义,不会查找父容器。因此,如果把controller放到Spring容器中直接报404。原创 2023-10-09 08:47:02 · 122 阅读 · 0 评论 -
Spring:注解方式启用AOP
proxyTargetClass=true:强制使用cglib动态代理。可以通过AopProxy.currentProxy来拿到代理对象。exposeProxy=true在当前线程暴露代理对象。原创 2023-10-07 21:59:00 · 224 阅读 · 0 评论 -
Spring: @ComponentScan注解,不设置basePackages时,为什么会扫描该注解所在的包?
可以看到如果没配置basePackages,会调用ClassUtils的静态方法getPackageName将声明@ComponentScan的类所在的包添加到basePackages中去。原创 2023-10-07 15:39:21 · 182 阅读 · 0 评论 -
Spring:处理@Autowired和@Value注解的BeanPostProcessor
AutowiredAnnotationBeanPostProcessor,它实现了MergedBeanDefinitionPostProcessor,因此会调用postProcessMergedBeanDefinition方法。它实现了InstantiationAwareBeanPostProcessor,因此在属性注入时会调用postProcessPropertyValues方法。如果@Autowired注解按类型找到了大于1个bean,则会按名字注入。原创 2023-10-07 10:42:30 · 109 阅读 · 0 评论 -
Spring: SmartInitializingSingleton
【代码】Spring: SmartInitializingSingleton。原创 2023-10-05 21:57:29 · 43 阅读 · 0 评论 -
Spring:通过@Lazy解决构造方法形式的循环依赖问题
一、定义2个循环依赖的类。原创 2023-10-04 21:45:45 · 260 阅读 · 0 评论 -
Spring bean:解决线程安全问题的总结
三、使用ThreadLocal成员变量。一、避免使用类成员变量。原创 2023-10-01 08:18:55 · 100 阅读 · 0 评论 -
Spring复习:(63)doCreateBean中BeanPostProcessor的调用顺序
从doCreateBean的代码可以看出,会先应用类型为MergedBeanDefinitionPostProcessor的BeanPostProcessor,然后才会调用initializeBean来应用普通的BeanPostProcessor。原创 2023-09-27 09:39:53 · 88 阅读 · 0 评论 -
spring复习:(62)自定义PropertySourcesPlaceHolderConfigurer
四、配置文件,配置PropertySourcesPlaceholderConfigurer。二、自定义PropertySourcesPlaceholderConfigurer。一、在resources目录下建立配置文件my.properties。三、在bean中使用placeholder。原创 2023-09-27 08:01:57 · 490 阅读 · 0 评论 -
spring复习:(61)自定义CustomAutowireConfigurer
三、配置文件中配置CustomAutowireConfigurer。二、定义bean,使用自定义注解;原创 2023-09-24 22:33:40 · 248 阅读 · 0 评论 -
spring复习:(60)自定义qualifier
三、配置文件中配置多个bean用来提供注入。二、需要注入其它bean的bean定义。原创 2023-09-24 21:55:45 · 107 阅读 · 0 评论 -
Spring复习:(59)标记性注解和qualifier配合使用
四、定义bean,注入步骤一中的接口,并使用标记性注解。五、配置文件beans18.xml。二、定义步骤一中接口的实现类。原创 2023-09-24 21:37:51 · 123 阅读 · 0 评论 -
Spring复习:(59)@Qualifier注解
Qualifier注解用来指定自动注入时合作bean需要满足的qualifier的名称,如果一个bean没有指定qualifier属性,则用它的id为qualifier,来给别的bean提供注入。原创 2023-08-24 15:03:50 · 339 阅读 · 0 评论 -
Spring复习:(58)<context:annotation-config/>的作用
context:component-scan base-package=“xxx.xxx”/> 包含了的功能。如果xml文件配置了bean中使用了@Autowired注解,则需要添加,否则不会进行注入。引入如下的BeanPostProcessor。原创 2023-08-23 10:56:59 · 218 阅读 · 0 评论 -
spring复习:(57)PropertyOverrideConfigurer用法及工作原理
二、spring配置文件。原创 2023-08-22 22:47:25 · 258 阅读 · 0 评论 -
Spring复习:(56)PropertySourcePlaceholderConfigurer的工作原理
因为在spring配置文件定义了类型为PropertySourcesPlaceholderConfigure的BeanFactoryPostProcessor,所以在容器创建dataSource这个bean时,它会对bean定义进行处理,将属性中的占位符替换为实际值。从上图可以看出,这个方法中会遍历拿到的PropertySource,根据传入的key拿到我们在属性配置文件中配置的值,然后返回,到此,从属性文件中读取属性信息的过程结束。原创 2023-08-22 18:45:01 · 531 阅读 · 0 评论 -
Spring复习:(55)ApplicationContext中BeanFactoryPostProcessor是怎么添加到容器的?
可以从上图看到,首先获取类型为BeanFactoryPostProcessor的所有bean的名字,然后遍历获取到的名字,最后调用getBean方法并把名字传进去,根据Spring的getBean流程,我们可以知道,此处调用getBean会最终调用doCreateBean来创建bean的实例,也就是创建出BeanFactoryPostProcessor的实例。原创 2023-08-22 16:54:41 · 286 阅读 · 0 评论 -
Spring6.0官方文档示例:(28)多种方式添加BeanPostProcessor
可以看到,ComponentScan扫描到的BeanPostProcessor最先执行,xml配置文件里的随后执行,而我们手动添加的BeanPostProcessor最后执行(因为它在保存BeanPostProcessor的CopyOnWriteArrayList的末尾)一、定义三个BeanPostProcessor。执行顺序貌似和官方文档描述有不同。原创 2023-08-22 13:27:52 · 299 阅读 · 2 评论 -
Spring6.0官方文档示例:(27)配置文件中bean定义的继承关系
【代码】Spring6.0官方文档示例:(27)配置文件中bean定义的继承关系。原创 2023-08-22 10:36:04 · 144 阅读 · 0 评论 -
Spring6.0官方文档示例:(27)bean的多个生命周期方法共存时的执行顺序
2)afterPropertiesSet(实现InitializingBean接口而定义的)2)destroy(实现DisposableBean接口而定义的)1)@PostConstruct注解。1)@PreDestroy注解。3)自定义的destroy方法。原创 2023-08-21 14:20:53 · 45 阅读 · 0 评论 -
Spring6.0官方文档示例:(26)配置文件中beans配置的default-init-method优先级低于bean上配置的init-method
【代码】Spring6.0官方文档示例:(26)配置文件中beans配置的default-init-method优先级低于bean上配置的init-method。原创 2023-08-21 14:14:35 · 197 阅读 · 0 评论 -
Spring6.0官方文档示例:(25)@RequestScope注解
【代码】Spring6.0官方文档示例:(25)@RequestScope注解。原创 2023-08-19 23:05:28 · 375 阅读 · 0 评论 -
Spring 6.0官方文档示例(24): replace-method的用法
二、replace bean定义。一、原始bean定义。原创 2023-08-19 15:47:57 · 392 阅读 · 0 评论 -
Spring mvc:SpringServletContainerInitializer
因为它使用了@HandlesTypes(WebApplicationInitializer.class)注解,所以web容器会寻找类路径上实现了WebApplicationInitializer的类。Spring-web模块的META-INFO目录的services目录下有名为javax.servlet.ServletContainerInitializer的文件,内容是。它在onStartup方法中会分别调用WebApplicationInitializer的onStartup方法。原创 2023-08-03 13:06:53 · 1073 阅读 · 0 评论 -
spring复习:(55)注解配置的情况下@ComponentScan指定的包中的组件是怎么被注册到容器的?
可以看到其进行了路径扫描并装配成资源(Resource),然后生成ScannedGernericBeanDefinition对象,然后添加到Set,最后将BeanDefinition Set返回。结论:是在context.refresh()处完成扫描和注册的。原创 2023-07-26 18:13:05 · 391 阅读 · 1 评论 -
Spring 6.0官方文档示例(23): singleton类型的bean和prototype类型的bean协同工作的方法(二)
【代码】Spring 6.0官方文档示例(23): singleton类型的bean和prototype类型的bean协同工作的方法(二)原创 2023-07-25 11:22:32 · 1082 阅读 · 1 评论 -
spring复习:(54)注解配置和xml配置时在bean实例化时的区别
可以看到其通过反射的方式调用了factoryBean的factoryMethod方法。而使用@Configuration+@Bean注解时,在bean定义解析时设置了。factoryBeanName和factoryMethodName。原创 2023-07-24 23:17:02 · 324 阅读 · 0 评论 -
Spring 6.0官方文档示例(22): singleton类型的bean和prototype类型的bean协同工作的方法(一)
【代码】Spring 6.0官方文档示例(22): singleton类型的bean和prototype类型的bean协同工作的方法(一)原创 2023-07-24 15:21:29 · 682 阅读 · 0 评论 -
spring复习:(53)手动向AnnotationConfigApplicationContext注册BeanFactoryPostProcessor
其中MyBeanFactoryPostProcessor 示例代码如下:原创 2023-07-23 19:14:49 · 271 阅读 · 0 评论 -
spring复习:(52)注解方式下,ConfigurationClassPostProcessor是怎么被添加到容器的?
从红线处可以看到,直接向beanDefinitionMap 进行了put,也就完成了向容器注册ConfigurationClassPostProcessor类的bean。进入this(registry, getOrCreateEnvironment(registry));原创 2023-07-23 11:44:08 · 345 阅读 · 0 评论 -
spring复习:(51)environment、systemProperties、systemEnvironment三个bean是在哪里被添加到容器的?
【代码】spring复习:(51)environment、systemProperties、systemEnvironment三个bean是在哪里被添加到容器的?原创 2023-07-23 09:39:20 · 471 阅读 · 0 评论 -
spring复习:(50)@Configuration注解配置的singleton的bean是什么时候被创建出来并缓存到容器的?
可以看到对非abstract、singleton的、非懒加载的bean,则会调用getBean方法创建bean并缓存(getBean方法的流程不再详述)向下拖动代码,可以看到beanFactory.preInstantiateSingletons();三、singleton bean的创建流程。运行到context.refresh();原创 2023-07-22 16:41:03 · 499 阅读 · 0 评论 -
spring复习:(49)@Configuration配置类上的注解是在哪里被解析的?
主类示例源代码如下:配置类源码如下:进入context.register方法:进入this.reader.register方法:进入registerBean方法:进入doRegisterBean方法:进入AnnotatedGenericBeanDefinition构造方法:进入AnnotationMetadata的introspect方法:进入StandardAnnotationMetadata的from方法:原创 2023-07-22 16:17:36 · 199 阅读 · 0 评论 -
spring复习:(48)ConfigurationClassPostProcessor
用来处理通过@Configuration注解类里的@Bean注解来标记的bean。原创 2023-07-20 10:17:02 · 207 阅读 · 0 评论 -
spring复习:(45)使用TransactionProxyFactoryBean来实现事务时,发生异常时,事务是怎么回滚的?
其中会调用:txInfo.getTransactionManager().rollback(txInfo.getTransactionStatus());invokeWithinTransaction方法发生异常时会调用completeTransactionAfterThrowing。可以看到了其调用了Connection对象的rollback方法。原创 2023-07-19 10:42:17 · 360 阅读 · 0 评论 -
spring复习:(44)使用TransactionProxyFactoryBean来实现事务时,事务是怎么提交的?
可以看出,最终是直接调用了Connection对象的commit方法。原创 2023-07-19 10:00:07 · 226 阅读 · 0 评论 -
spring复习:(43)使用TransactionProxyFactoryBean来实现事务时,事务是怎么开启的?
该方法执行到return ((MethodInterceptor) interceptorOrInterceptionAdvice).invoke(this);当调用addStudent时,会直接跳转到JdkDynamicAopProxy的invoke方法(因为实现了接口,代理对象的实现为jdk 动态代理)原创 2023-07-19 09:17:18 · 417 阅读 · 0 评论 -
spring复习:(42)配置文件的方式实现事务(TransactionProxyFactoryBean)
四、主类,调用TransactionProxyFactoryBean。原创 2023-07-18 19:16:49 · 1175 阅读 · 0 评论 -
spring复习:(41)全注解方式的事务
分别是insert into xx values(4,5)的操作被保留或被回滚(也就是事务生效)五、可以分别去掉和加上service类中的@Transactional注解,看运行效果。四、定义主类,并调用service。三、定义service。原创 2023-07-18 17:53:37 · 1058 阅读 · 0 评论 -
spring复习:(40)全注解的spring AOP
【代码】spring复习:(40)全注解的spring AOP。原创 2023-07-18 14:34:03 · 874 阅读 · 0 评论