
Spring
文章平均质量分 66
点不点外卖
这个作者很懒,什么都没留下…
展开
-
【Spring】@Value在静态属性上为什么不生效
我们都知道@Value是不能用在静态属性上的,那么究竟Spring是怎么处理的呢?对此有什么解决方案?构建自动装配的元数据如下图,Spring会为加了一下注解的属性进行自动装配。@Autowired@Value通过这里的代码可以看到,Spring是不会对静态属性进行自动装配的。但是Spring没有告诉我们,它为什么要跳过静态属性的自动装配,同样,静态方法也不做自动装配。如果我们必须要对静态属性赋值的时候,可以通过将@Value加到Method上来实现,只要这个方式不是静态的Spri.原创 2021-07-20 15:15:07 · 825 阅读 · 0 评论 -
【Spring】AOP
关于AOP什么是AOPSpring的AOP基于接口实现AOPAspectJSpring-AOP底层原理解析切面责任链调用调用连接点joinpoint什么是AOPSpring官网上说AOP是对OOP的补充,在OOP中模块化的关键部分是类,而AOP中模块化的关键部分是切面。Aspect-oriented Programming (AOP) complements Object-oriented Programming (OOP) by providing another way of thinking原创 2021-02-25 09:42:42 · 105 阅读 · 0 评论 -
【Spring】Spring是如何完成扫描的
// 在创建Spring容器的时候,AnnotationConfigApplicationContext的构造方法中// 分别创建了AnnotatedBeanDefinitionReader和ClassPathBeanDefinitionScannerpublic AnnotationConfigApplicationContext() { this.reader = new AnnotatedBeanDefinitionReader(this); this.scanner = new Clas原创 2020-11-24 10:46:44 · 503 阅读 · 0 评论 -
【Spring】Spring何时执行AOP
跟踪Spring启动过程,发现Spring是在创建Bean的过程中调用到getEarlyBeanReference方法时候开始对目标对象进行代理。下图方法调用栈是存在循环依赖的调用,不存在循环依赖的调用栈看上去会稍简单一些。...原创 2020-09-02 13:46:15 · 1175 阅读 · 0 评论 -
【Spring】推断构造方法
Spring在创建Bean的时候是如何推断出合适的构造方法的。/*** 推断候选构造器* @param beanClass* @param beanName* @return* @throws BeanCreationException*/@Override@Nullablepublic Constructor<?>[] determineCandidateConstructors(Class<?> beanClass, final String beanName原创 2020-09-01 19:49:32 · 528 阅读 · 0 评论 -
【Spring】getBeanPostProcessors()
研究Spring源码过程中,突然有一天对Spring调用了多少次getBeanPostProcessors()产生了兴趣,就是说Spring的启动过程BeanPostProcessors都做了哪些事情。DisposableBeanAdapter/** * 根据给定的bd销毁Bean实例,通常是prototype类型的 * Destroy the given bean instance (usually a prototype instance * obtained from this fac原创 2020-08-31 17:56:58 · 447 阅读 · 0 评论 -
【Spring】自动装配
本文分析基于Spring 5.2.x源码自动装配模式https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-autowireSpring官网列出了四种自动装配模式,分别是nobyNamebyTypeconstructor在使用xml对Spring配置时,可以通过标签的default-autowire对所有在xml中配置的Bean设置自动原创 2020-08-11 11:58:17 · 111 阅读 · 0 评论 -
【Spring】compileJava
今天学习过程中写代码用了lambda表达式,但是出现了错误: -source 1.6 中不支持 lambda 表达式,原因是我直接在编译好的Spring4.3.x的源码环境写的,而Spring源码的build.gradle中对allprojects有如下配置:compileJava { sourceCompatibility = 1.6 targetCompatibility = 1.6 options.encoding = 'UTF-8' }将这里的1.6改成1.8就可以了。...原创 2020-07-07 10:01:19 · 392 阅读 · 0 评论 -
【Spring】BeanDefinitionRegistryPostProcessor
BeanFactoryPostProcessor 向容器添加自定义bean在之前的一篇文章中写到通过BeanFactoryPostProcessor向Spring容器中添加自定义bean,最近在学习Spring源码过程中发现一个更强大更严谨的方式–BeanDefinitionRegistryPostProcessor,这是一个继承了BeanFactoryPostProcessor的接口,该接口增加了如下方法/** * Modify the application context's internal原创 2020-06-15 10:21:36 · 279 阅读 · 0 评论 -
【Spring】ProxyFactory
Spring的ProxyFactory是一个非常优秀的工厂模式的例子。/** * Create a new proxy according to the settings in this factory. * <p>Can be called repeatedly. Effect will vary if we've added * or removed interfaces. Can add and remove interceptors. * <p>Uses t原创 2020-06-11 10:53:19 · 292 阅读 · 0 评论 -
【动态代理】手写自己的动态代理
Spring中常用到JDK动态代理和CGLIB动态代理,让他们帮我们生成对目标对象增强后的代理对象,避免了在这个工程中手动新建代理类文件导致类爆炸,手写动态代理也是以此为目标。/** * 目标对象 * @author l */public interface TargetInterface { /** * 目标对象方法 * @param str1 参数 * @param str2 参数 */ void query(String str1, String str2);}/*原创 2020-06-07 22:55:08 · 299 阅读 · 0 评论 -
【动态代理】JDK动态代理为什么要基于接口
我们都知道CGLIB动态代理是基于继承的,而JDK动态代理是基于接口的,为什么不能也基于继承呢?现在通过代码来看看原因,至于面试的时候可能会被问到为什么不通过聚合或者组合来实现,原因很明显就是为了降低耦合性。// 定义目标对象的接口public interface UserDao { /** * */ void query();}// 目标对象@Repository("userDao")public class UserDaoImpl implements UserDao { @原创 2020-06-02 12:07:56 · 783 阅读 · 2 评论 -
【Mybatis】Mybatis的一级缓存
Mybatis的一级缓存在Spring中为什么会失效上图是在做一个select查询时的方法调用栈,发现mybatis在和spring的整合包mybatis-spring中做了关闭SqlSession的操作,原因应该是mybatis交给Spring管理之后没有办法控制SqlSession的关闭,让程序员去关闭的话又增加了程序对mybatis的耦合性,mybatis的一级缓存就是基于SqlSession的,因此一级缓存在Spring中就失效了。...原创 2020-05-20 15:25:48 · 204 阅读 · 0 评论 -
【Spring】Spring5新特性之日志
Spring5新特性Spring4和Spring5对比Spring5.x的日志注:Spring4.x为Spring4.3.x,Spring5.x为Spring5.2.xSpring4和Spring5对比Spring4的全部项目:Spring5的全部项目:对比Spring4.x版本和Spring5.x版本可以发现后者多了一个spring-jcl项目,这是Spring自己重写了apache的JCL。Spring5.x的日志import org.apache.commons.logging.Lo原创 2020-05-19 13:49:48 · 333 阅读 · 0 评论 -
【Spring】@Configuration
@Configuration在Spring中的作用示例源码分析示例@Configuration注解在Spring开发中作用于配置类上,结合@Bean注解来创建一些单例的bean注册到Spring容器中,@Configuration的作用其实可以理解为用来保证bean是单例的,先写段代码看下用于不用这个注解有没有区别:CustomerService和UserService简单的写个构造函数输出一下配置类中customerService()调用了userService方法,在没有加@Configura原创 2020-05-17 00:48:09 · 249 阅读 · 0 评论 -
【Spring】BeanPostProcessor和BeanFactoryPostProcessor
BeanPostProcessor和BeanFactoryPostProcessor都是Spring提供给开发者的扩展点,具体怎么用直接看下代码一目了然,两者的区别也在功能上有所体现。@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean;}@Nullabledefault Object postProcess原创 2020-05-09 11:14:17 · 237 阅读 · 0 评论 -
【Spring】Spring小技巧--使用Set去重
原创 2020-05-07 18:56:03 · 281 阅读 · 0 评论 -
【Spring】Bean和BeanDefinition
先来看看java的Class,这个是大家最熟悉的,站在面向对象的角度,万物皆对象,而Class就是用来描述对象的对象。/* * Private constructor. Only the Java Virtual Machine creates Class objects. * This constructor is not used and prevents the def...原创 2020-05-07 11:02:51 · 206 阅读 · 0 评论 -
【Spring】BeanFactoryPostProcessor 向容器添加自定义bean
public interface BeanFactoryPostProcessor { /** * Modify the application context's internal bean factory after its standard * initialization. All bean definitions will have been loaded, but no b...原创 2020-04-17 17:24:55 · 953 阅读 · 0 评论 -
【SpringBoot】启动流程
SpringBoot版本–2.1.51、创建SpringApplication对象public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.sources = new LinkedHashSet(); this.bannerMo...原创 2020-03-29 23:05:12 · 103 阅读 · 0 评论 -
【SpringBoot】事件回调
SpringBoot中的几个重要事件回调机制ApplicationContextInitializerSpringApplicationRunnerListenerApplicationRunnerCommandLineRunner原创 2020-03-29 22:21:24 · 603 阅读 · 0 评论 -
使用PF4J遇到的一些问题
序言插件升级在实现插件升级功能时,将低版本插件卸载之后,重新加载并启动高版本插件的时候,加载成功,但是启动的报了找不到类的错误。目前尚未找到原因,但是找到了解决方案,高版本的插件不与低版本插件重名,不知是否是PF4J要求如此。...原创 2020-01-09 15:24:26 · 1159 阅读 · 0 评论 -
ApplicationContext
原创 2020-01-09 15:06:41 · 100 阅读 · 0 评论