Spring源码
文章平均质量分 70
java持续实践
Java开发
展开
-
面试必问之: Aop详解
https://www.cnblogs.com/joy99/p/10941543.html转载 2021-06-03 10:14:44 · 856 阅读 · 0 评论 -
Spring源码解析之 Bean与BeanDefinition详解
Spring解决的核心问题Spring解决的核心问题: 把对象之间的关系用配置来管理依赖注入: 依赖关系在Spring的IOC容器中管理通过把对象包装在Bean中, 以达到管理对象和进行额外操作的目的Bean与BeanDefinitionBean 是Spring的一等公民Bean 的本质就是Java对象, 这个对象的生命周期由Spring容器来进行管理不需要为了创建Spring的Bean 而在Java类上做额外的限制, 体现了Spring的低侵入.对于Java对象的控制体现在配置上(原创 2021-03-13 08:45:36 · 1697 阅读 · 1 评论 -
Spring源码解析之 IOC的主流程与注解加载bean的验证
文章目录学习Spring源码的注意点基于注解加载Bean验证Controller等其他注解加载进容器学习Spring源码的注意点不要太在意版本的问题不用太过于在意细节, 掌握主要流程为主基于注解加载Bean在之前的如下文章中, 是根据xml去加载Bean 的https://javaweixin6.blog.csdn.net/article/details/113790554本次改为根据注解把bean加载到容器中去在Service的实现类中, 加上@Service 注解Entranc原创 2021-03-10 07:48:39 · 204 阅读 · 0 评论 -
Spring 源码解析之 实现容器的依赖注入 DI
实现容器的依赖注入为什么需要依赖注入如果一个类中, 依赖了另外一个类, 如下MainPageController 依赖了HeadLineShopCategoryCombineService . 那么就要保证HeadLineShopCategoryCombineService 这个类是初始化好的, 否则调用headLineShopCategoryCombineService.getMainPageInfo()方法的时候, 就会报空指针.@Controller@Getterpublic class M原创 2021-03-08 08:20:43 · 202 阅读 · 0 评论 -
Spring源码之 Bean实例的作用域
Spring框架中,包含有多种作用域singleton 在整个IOC容器中, 只会有一个Bean实例prototype 原型模式, 每次通过getBean方法获取Bean时, 都将产生一个新的对象.request 每次请求时, 都会产生一个新的实例. 只有在web应用中使用时, 才会有效session 每次会话都会产生一个新的实例globalsession 每个全局的http session . 使用 session定义的bean都将产生一个新实例. 只有在web应用中使用时, 才会有效.原创 2021-03-07 18:57:00 · 148 阅读 · 0 评论 -
Spring源码之 实现容器的增删改查
文章目录容器的增删改查测试用例容器的增删改查容器的增加删除操作, 往容器中添加和删除bean根据Class获取对应实例: 根据Map的key获取值获取所有的Class和实例通过注解获取被注解标注的Class通过超类获取对应子类的Class (通过传入接口获取接口对应实现类的Class对象, 例如传入Service的接口, 获取Service的实现类.)获取容器载体存储的Class的数量上面的需求实现的代码如下 /** * 添加一个class 对象和bean实例到容器中原创 2021-03-07 18:50:21 · 227 阅读 · 0 评论 -
Spring源码之 容器的载体和容器的加载
文章目录创建单例容器实现容器实现容器的加载测试用例创建单例容器使用如下的枚举创建单例容器 .@Slf4j// 创建私有的无参构造函数@NoArgsConstructor(access = AccessLevel.PRIVATE)public class BeanContainer { /** * 获取单例的bean容器实例 * @return */ public static BeanContainer getInstance() {原创 2021-03-07 16:00:13 · 195 阅读 · 0 评论 -
Spring 源码解析之 防止反射和序列化破解的单例写法
文章目录使用枚举内部类的单例尝试直接通过枚举反射创建实例反编译查看枚举单例模式源码(证明其是饿汉模式)使用枚举内部类的单例如下的类, 使用枚举的内部类方式创建单例. 在枚举中的构造方法创建对象 .public class EnumStaringSingleton { // 私有无参构造函数 private EnumStaringSingleton() { } public static EnumStaringSingleton getInstance() {原创 2021-03-07 11:09:26 · 236 阅读 · 0 评论 -
Spring 源码解析之 反射破解单例模式
文章目录为什么要用单例模式常见的单例模式的写法反射破解单例模式为什么要用单例模式需要同一个容器, 将所有的目标对象管理起来, 容器需要用单例来实现, 因此就要用到单例模式.常见的单例模式的写法常见的单例模式, 一般分为懒汉式和饿汉式.饿汉式的写法https://javaweixin6.blog.csdn.net/article/details/108435222懒汉式的写法https://javaweixin6.blog.csdn.net/article/details/108435929原创 2021-03-06 20:09:22 · 297 阅读 · 1 评论 -
Spring 源码之实现Class对象的提取
文章目录获取Class类的集合单元测试获取Class类的集合获取某个包下的类集合 代码如下 .主要是三步获取类加载器: 通过Thread.currentThread().getContextClassLoader() 来获取通过类加载器获取到加载的资源信息 , 是通过classLoader.getResource获取, 传入包路径, 注意要把. , 转化为"/".获取类的集合: 主要是 过滤出文件类型, 目前只处理file类型的协议, 再获取包下的实际绝对路径, 最后是通过绝对路径, 去原创 2021-03-06 19:21:54 · 1017 阅读 · 1 评论 -
Spring 源码解析之 通过类加载器获取资源集合
文章目录提取标记对象编写获取某个包下的类的集合工具类提取标记对象实现思路:指定对象范围, 获取范围内的所有类遍历所有类, 获取被注解标记的类并加载进容器里.编写获取某个包下的类的集合工具类获取某个包下的类集合 :1. 获取到类加载器:目的: 获取项目发布的实际路径 . 不同的系统表示路径的方法不同. 如果是war或jar包就找不到jar包.类加载器: ClassLoaderClassLoader从字节码文件中读取字节码, 并转换为java.lang.Class一个类实例, 并存储原创 2021-03-06 11:41:20 · 520 阅读 · 0 评论 -
模仿Spring创建自定义注解
文章目录ControllerServiceRepositoryComponent模仿Spring起一个类似的包org.simpleframework.core.annotation下面模仿Spring创建如下的注解.创建不同的注解的作用是根据不同的注解, 去做不同的处理.例如Controller 注解可能要解析映射.Service 注解要 去开启事务.Repository 要去执行sql等Controllerpackage org.simpleframework.core.annotat原创 2021-03-06 11:01:47 · 140 阅读 · 0 评论 -
自定义IOC容器思路
文章目录自定义IOC容器思路框架应该具备的最基本的功能IOC容器的实现自定义IOC容器思路自定义IOC容器的思路如下, 给类标识上注解, 通过IOC容器去解析注解生成对象, 在程序运行时, 让容器去注入对象.框架应该具备的最基本的功能解析配置: 将相关配置加载进内存中, 存入进数据结构. 解析的配置可以是注解或者XML定位与注册对象: 解析完配置后, 需要获取内存中的目标对象, 定位就涉及到标记, 注解就是一种很好的标记语言.注入对象: 把需要用到这个对象的地方, 把对象精确无误的返回过来原创 2021-03-05 08:14:15 · 233 阅读 · 0 评论 -
Spring之IOC概念讲解
文章目录IOC控制反转Ioc - Inversion of Control依赖注入DI依赖注入DI实现控制反转IOC DI DL的关系依赖注入的方式依赖倒置原则IOC容器的优势注解与Spring框架中IOC的关系: 使用注解标记需要管理的实例, 并依据注解属性做精细控制.通过注解对类, 成员变量进行标记, 并通过解析注解标签里面的属性, 来做精细的操作.例如Controller, 可以给所有的Controller来设定一个@Controller自定义注解标签, 来标识这个类来处理页面请求的,原创 2021-03-05 07:36:33 · 226 阅读 · 1 评论 -
自己搭建一个jsp项目小demo与jsp的原理
文章目录一. 自研框架的模块二. 创建新的模块三. pom文件导入依赖与插件tomcat7-maven-plugin 插件的小坑四 编写一个Servlet 与jsp五. 启动项目六. jsp文件本质一. 自研框架的模块自研框架的模块如下.主要包含了Spring 的核心的IOC和AOP, Parser用于把配置文件中的信息解析到类中.web层中, 实现Servlet 和MVC二. 创建新的模块新的模块取名叫做 simpleframework三. pom文件导入依赖与插件如下, pom中导入原创 2021-02-11 20:42:33 · 769 阅读 · 0 评论 -
自己的模块中引用Spring源码
文章目录一. 新建自己的模块一. 新建自己的模块接着写一个接口package com.demo.service;/** * 类名称:WelcomeService * 类描述:TODO * * @author: https://javaweixin6.blog.csdn.net/ * 创建时间:2021/2/11 15:58 * Version 1.0 */public interface WelcomeService { public String sayHello(Stri原创 2021-02-11 16:41:18 · 338 阅读 · 2 评论 -
Spring源码编译 (基于Spring5.2.0 RELEASE 版本)
文章目录一. 下载源码二. 编译源码三. 编译oxm 模块四. 导入IDE五. 排除spring-aspects 模块一. 下载源码https://github.com/spring-projects/spring-framework/tree/v5.2.0.RELEASE在Spring的GitHub仓库中, 选择5.2.0.RELEASE的版本进行下载到本地. 可以下载zip 包, 或者使用git clone命令进行下载二. 编译源码在源码的readme中, 有编译源码的教程 ,点击下面的超链原创 2021-02-11 15:41:42 · 743 阅读 · 0 评论