Spring框架源码学习
文章平均质量分 92
你好y
这个作者很懒,什么都没留下…
展开
-
【Spring总结】spring循环依赖
补充:创建代理要点要完全理解循环依赖,需要理解代理对象的创建时机掌握ProxyFactory创建代理的过程,理解Advisor, Advice, Pointcut 与Aspect掌握AnnotationAwareAspectJAutoProxyCreator筛选Advisor合格者,创建代理的过程1、设置目标对象2、设置环绕通知(调用目标)3、创建代理对象,调用方法现在是调用每个方法都会进行功能的增强。但是想要一种调用foo()方法的时候功能增强,调用bar()方法的时候不增强,怎么原创 2022-03-27 20:43:05 · 447 阅读 · 0 评论 -
【Spring总结】常见注解
SpringBoot中常见的注解有哪些Spring中常见的注解1、事务@Transactional可以加在方法上也可以加在类上,加在类上标识这个类上所有的公共方法都是被事务控制的。@EnableTransactionManagement:启用声明式事务注解@Order:控制一些bean的执行顺序(数字越小的优先级越高)@EnableAspectJAutoProxy:启用AOP的自动代理对于@Before、@After这些是属于第三方的AspectJ库的@Conditional:spr原创 2022-03-27 20:42:14 · 1492 阅读 · 0 评论 -
【Spring总结】SpringMVC执行流程
SpringMVC的执行流程初始化阶段:在Web容器第- -次用到DispatcherServlet的时候,会创建其对象并执行init方法init 方法内会创建Spring Web容器,并调用容器refresh方法refresh 过程中会创建并初始化SpringMVC中的重要组件,例如MultipartResolver, HandlerMapping,HandlerAdapter, HandlerExceptionResolver.ViewResolver等容器初始化后, 会将上一步初始化好的原创 2022-03-27 20:40:52 · 634 阅读 · 0 评论 -
【Spring总结】spring事务
面试题:Spring 事务失效的几种场景及原因1、检查异常导致事务失效(例如文件未找到这种需要去声明异常或者需要try。。catch处理的)原因:spring只对Error和RuntimeException这两个类及其子类才会进行回滚操作,如果抛出的是检查异常并不会进行回滚。解决:在注解上表明回滚的异常抛出检查异常导致事务不能正确回滚原因: Spring 默认只会回滚非检查异常解法:配置rollbackFor属性2,try…catch导致事务失效声明式事务的实现原理:声原创 2022-03-27 20:40:00 · 1377 阅读 · 0 评论 -
【Spring总结】Spring Bean
1、面试题:Spring Bean的生命周期即bean从创建到销毁spring做了哪些事情?阶段5、7比较重要。spring里面的bean都是懒惰式的初始化,当你第一次去获取它的时候,他才会去创建bean的实例,进行依赖注入、初始化。阶段1:处理名称,检查缓存要点掌握别名处理了解FactoryBean的名字规范掌握三级缓存的概念1、spring当中支持别名,一个bean可以有多个名称。2、FactoryBean式spring当中专门用来生产其他对象的工厂bean。如果想要获取工厂本原创 2022-03-27 20:39:00 · 1866 阅读 · 0 评论 -
【Spring总结】Refresh
RefreshApplicationContext refresh的流程概述ApplicationContext是spring中的核心容器,refresh是ApplicationContext的一个方法,主要作用是用来初始化ApplicationContext。refresh一共分为十二个步骤。所有的ApplicationContext有一个共同的父类叫AbstractApplicationContext。这个父类里有refresh方法,这个方法里面有12个比较重要的方法。1、蓝色:代表做一些准备原创 2022-03-27 20:38:07 · 3052 阅读 · 4 评论 -
【总结】自研Spring框架的实现总结
实例的创建1、创建注解@Controller、@Service、@Repository、@Component2、提取标记对象实现思路◆指定范围,获取范围内的所有类◆遍历所有类,获取被注解标记的类并加载进容器里怎么根据包名获取类集合?创建一个方法extractPacakgeClass,利用类加载器获取资源url,再根据协议名过滤出文件类型的资源,遍历目录获得class文件,再使用反射获取对应的Class对象添加到集合中。extractPacakgeClass里面需要完成的事情◆获取原创 2022-02-05 16:51:09 · 1084 阅读 · 0 评论 -
【源码解读】springmvc源码解读
tomcat会优先加载servlet的监听器,以保证在servlet被创建之前,即context组件进行初始化的时候,去调用里面的contextInitialized方法。来根据contextConfigLocation去读取并解析spring容器的配置,去创建并刷新容器的实例来。@Overridepublic void contextInitialized(ServletContextEvent event) { initWebApplicationContext(event.getServl.原创 2022-01-19 10:13:37 · 367 阅读 · 0 评论 -
【自研框架三】自研框架MVC
回顾DispatcherServlet◆解析请求路径和请求方法◆依赖容器,建立并维护Controller方法与请求的映射◆用合适得Controller方法去处理特定的请求由于给DispatcherServlet标记了@WebServlet("/"),所以在tomcat启动之后会将DispatcherServlet给加载进来。因为设置了/匹配所有的的url-pattern,而且在tomcat插件中的设置了项目的根路径,< path>/${project.artifactId}&l原创 2022-01-19 10:13:59 · 355 阅读 · 0 评论 -
【Spring源码解读】SpringAOP源码
BeanPostProcessor及其家族成员InstantiationAwareBeanPostProcessor这三个方法覆盖Bean实例化的前后过程以及Bean的属性设置在Bean的实例化过程中(实例化是在Bean初始化之前并且也是在附上属性之前)给Bean去加上额外的逻辑。public interface InstantiationAwareBeanPostProcessor extends BeanPostProcessor { //用来在对象实例化前直接返回一个对象(原创 2022-01-18 20:53:42 · 929 阅读 · 2 评论 -
【自研框架二】改良自研框架AOP
Aspect框架提供了完整的AOP解决方案,是AOP的Java实现版本◆定义切面语法以及切面语法的解析机制◆提供了强大的织入工具SpringAOP只支持方法级别的织入,但是AspectJ几乎支持所有连接点的织入,称为AOP的一套完整的解决方案。既然AspectJ那么强大,为什么spring不直接复用AspectJ呢?因为方法级别的织入已经能满足绝大多数的需求了,并且Aspect的学习成本比springAOP高很多,还没有spring AOP用起来简单。花20%的代价完成80%的需求。Aspe原创 2022-01-18 20:50:52 · 280 阅读 · 0 评论 -
【自研框架二】代理模式、SpringAOP
回顾先前根据工厂模式、反射、注解实现了IoC容器,依赖注入核心代码:前期准备:根据传入的包名和自身的ClassLoader获取url加载资源对象,再通过url获得资源所在的根路径,之后去递归获取根路径下的所有目录下的class文件,并加载所有的class对象将其存入到集合中,将class集合返回给框架以便后面做容器初始化的处理,即有了根据packageName有了提取class的能力。开始实现IoC容器:先是定义注解标签(@Component、@Controller、@Service、@R原创 2022-01-18 20:49:15 · 358 阅读 · 0 评论 -
【Spring源码解读】Spring的依赖注入
依赖注入大致流程◆Spring在Bean实例的创建过程中做了 很多精细化控制finishBeanFactoryInitialization(beanFactory);// Instantiate all remaining (non-lazy-init) singletons. beanFactory.preInstantiateSingletons();finishBeanFactoryInitialization(beanFactory);方法里面的preInstantiateSingle原创 2022-01-18 20:43:06 · 667 阅读 · 0 评论 -
refresh方法源码解析
后置处理器PostProcessor本身也是一种需要注册到容器里的Bean◆其里面的方法会在特定的时机被容器调用◆实现不改变容器或者Bean核心逻辑的情况 下对Bean进行扩展◆对Bean进行包装,影响其行为、修改Bean的内容等PostProcessor的种类大类分为容器级别的后置处理器以及Bean级别的后置处理器◆BeanDefinitionRegistryPostProcessor◆BeanFactoryPostProcessor◆BeanPostProcessor前两个是容器级别原创 2022-01-18 20:37:32 · 595 阅读 · 1 评论 -
Spring基础核心模板
Beans: 所有应用都要用到的,包含访问配置文件,创建和管理bean以及进行IoC操作的类。里面的BeanFactory接口是spring的核心框架接口。Core: 包含spring的核心工具类,spring的其他组件都要使用这个包里的类。是其他组件的基本核心。Context: spring的上下文,也称为spring的IoC容器,通过上下文,我们可以获得容器中的bean,里面的ApplicationContext接口是关键,作为Beans模块里面的BeanFactory里面的扩展,但与其不...原创 2022-01-18 20:26:37 · 907 阅读 · 0 评论 -
【Spring源码学习IOC】SpringIoC容器源码解析
回顾将之前的xml配置改为使用注解获取bean对象以及依赖注入package com.imooc;@Configuration@ComponentScan("com.imooc")public class Entrance { public static void main1(String[] args) { System.out.println("hello"); String xmlPath="C:\\LearnSources\\JavaLearn\\Codes原创 2022-01-18 20:21:01 · 352 阅读 · 0 评论 -
【自研框架一】自研框架IoC容器及单例模式
自研框架IoC容器的使用框架具备的最基本功能◆解析配置◆定位与注册对象, 定位就是标记(注解),定位到对象之后,需要将对象注册到容器中◆注入对象, 在用户需要时将对象精确的返回给用户◆提供通用的工具类, 方便用户和框架根据自身需求进行调用IoC容器的实现对象:泛指被标记的东西,通常指类。将类名以及类以键值对存入到容器当中。存贮的并不是类实例本身,而是类得class对象,xml属性信息或者注解,将他们组成beanFactory存储在容器里。之后再决定是否在容器初始化的时候直接创建经过目原创 2022-01-18 20:10:35 · 656 阅读 · 0 评论 -
【自研框架一】反射、注解、控制反转
反射允许一个java类获得它所有的成员变量和方法,并且显示出来允许程序在运行时来进行自我检查并且对内部的成员进行操作反射主要是指程序可以访问,检测和修改它本身状态或行为的- -种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义只要给定jav类的package和名字,就可以通过反射获得类的所有信息。反射机制的作用◆在运行时判断任意一个对象所属的类◆在运行时获取类的对象◆在运行时访问java对象的属性, 方法,构造方法等反射依赖reflect和Classjava原创 2022-01-18 20:05:37 · 415 阅读 · 0 评论 -
【自研框架一】门面模式、简单工厂模式、工厂方法模式、抽象工厂模式
关于自研框架◆目的:为了更好地了解Spring框架◆注意的点:会有所取舍,不一-定严格与Spring线路同步建议:还是得多动手,边看边跟着做provided表示程序在运行、编译、测试时都是用这个jar包,和compile不同的是,compile在打war包时将jar包打进去,而provided不会。编写servlet,继承HttpServlet,使用注解注册,重写get方法。转发到jsp页面@WebServlet("/hello")public class HelloServlet exte原创 2022-01-18 20:00:43 · 487 阅读 · 0 评论