spring
文章平均质量分 67
Java充电桩
这个作者很懒,什么都没留下…
展开
-
手撸spring15: @Autowired自动注入bean 以及@Value自动注入属性
上回书我们就说到要用@Value来取代spring配置, 顺便手撸一下@Autowired 其实很简单,撸完加深了对注解开发的理解原创 2022-06-15 14:14:45 · 576 阅读 · 0 评论 -
手撸spring14: component注解扫描 自动注册bean, 以及属性注入
之前主要都是通过配置文件定义spring的一些bean,以及一些属性文件, 不过后面spring升级成springboot后,很多都开始用注解开发来取代配置文件了.所以我们也开始慢慢升级了原创 2022-06-13 12:57:56 · 926 阅读 · 0 评论 -
手撸spring13: aop动态代理插手bean的生命周期
aop动态代理可以在对象操作执行时,补充一些骚操作, 而且因为是通过方法名进行匹配的, 对象自己不用额外操作,可以说是无感的! 比较场景的场景就是 接口调用时间的记录了.原创 2022-06-10 13:08:30 · 201 阅读 · 0 评论 -
手撸spring12: 基于JDK、Cglib 实现AOP切面 动态代理生成对象
分别用jdk 和cglib代理生成对象, 并通过aop切面拦截方法做操作原创 2022-06-02 13:24:18 · 287 阅读 · 0 评论 -
手撸spring11: 基于观察者模式 实现事件监听器解耦代码
观察者模式可以理解为, 订阅某种行为后, 当执行该行为时, 会向订阅者发布事件, 接收该事件的订阅者,就会各自去做自己需要做的事, 以此完成系统的解耦.如用户注册会员后, 可能需要发送短信通知, 发送优惠券等一些常见的操作.如果把这些业务处理都写在一块就容易造成代码的耦合, 并且还会影响主流程的进行.例如我注册会员后, 你因为发送优惠券的问题导致会员注册失败, 这不就扯淡嘛!所以流程上来说, 应该是 我注册会员就只注册会员, 我跟需要配合的业务通知一下,这个人注册好了!你们爱怎么样就怎么样, 出问题原创 2022-05-26 16:19:06 · 163 阅读 · 0 评论 -
手撸Spring10: 通过Bean作用域管理对象, FactoryBean的实现及使用
交给Spring 管理的 Bean对象,获取的就是一定是单例模式吗? 有没有可能是原型模式呢?其实我们在配置参数时默认走的就是单例模式, 但特殊情况下需要原型模式也是可以调整的嘛!BeanDefinition既然要调整Bean的信息,那肯定要先改造bean定义类咯!package com.linnine.spring.beans.factory.config;import com.linnine.spring.beans.PropertyValues;import lombok.Data;原创 2022-05-25 10:17:08 · 174 阅读 · 0 评论 -
手撸Spring09: 通过继承感知类 获取Spring容器提供的一些资源
Srping是有提供一些资源供我们外部获取的, 比如Spring上下文,bean工厂等等, 我们要去获取资源进行扩展时, 并不需要进行注入,而是通过一些感知类来获取资源即可.首先是定义 标记接口Aware说起来你可能不信,但是他的源码就是这么简单 package com.linnine.spring.beans.factory;/** * 定义一个感知接口 * 用来归纳 */public interface Aware {}然后是定义一些感知类容器感知类用于感知bean工厂p原创 2022-05-24 13:38:20 · 371 阅读 · 0 评论 -
手撸spring08: 将初始化和销毁方法交给Spring管理 取代static静态代码块更优雅
上一章中是在Bean注册后实行属性的填充,和初始化过程中的前置处理和后置处理.今天撸的这块代码,缺胳膊少腿的, 所以我决定一边跟着撸 一边解决问题,把那些缺的胳膊和腿补上!两种形式可以实现这一章的需求, 一是通过实现Spring的默认类,重写方法,然后spring在执行时调用.另一种则是写在配置文件中的属性,通过init-method和destroy-method来手动注册定义初始化和销毁方法的接口InitializingBean初始化方法,言简意赅的方法名,在初始化后执行package com原创 2022-05-23 12:34:03 · 607 阅读 · 0 评论 -
手撸spring07: 实现应用上下文ApplicationContext 自动加载配置文件 扩展机制
上回书说到加载配置文件中的配置信息自动注册到bean工厂里,这次我们再将他整合起来,一步到位,顺便扩展一下功能.添加两个后处理器BeanPostProcessorpackage com.linnine.spring.beans.factory.config;import com.linnine.spring.beans.BeansException; /** * bean后处理器 */public interface BeanPostProcessor { /** *原创 2022-05-12 10:53:17 · 344 阅读 · 2 评论 -
手撸Spring06: 通过三种资源加载器读取配置文件
上回书说到, 我们每次要注册bean都是代码现场注册去插入,很不方便, 所以我们要开始搞从配置文件里面读出来自动注册,让用户一句话搞定.BeanDefinitionReader首先定义一个接口,因为可以有多种方式去读取配置文件/** * 读取 bean定义的接口 */public interface BeanDefinitionReader { BeanDefinitionRegistry getRegistry(); ResourceLoader getResourceLo原创 2022-05-05 10:32:52 · 821 阅读 · 0 评论 -
spring手撸05: Bean属性注入 Bean依赖注入基本原理
前面说的只是根据有参构造方法的Bean创建, 今天则是来进行属性注入和依赖注入.比如常见的@Vale属性注入和@Resource依赖注入,不过我们还没那么快跳到注解,而是先讲一下基本的注入.之前就曾说过, BeanDefinition 没有那么简单,上次改成了Class,这次加入属性.主要是用于记录Bean需要的属性名,和属性值.PropertyValue所以建立一个PropertyValue对象.@Datapublic class PropertyValue { private f原创 2022-04-27 14:19:52 · 740 阅读 · 0 评论 -
Spring手撸04:使用Cglib实现含有构造函数的类实现策略
上回书说到Spring 实现Bean定义/注册/创建的一个流程,但在创建的时候其实埋了个坑,今天这回书,就把这个坑填掉!主要就是在实例化这个过程,只是草率的使用class.newInstance();但其实这个方法已经被废弃掉了,因为这个方法必须要有无参构造方法,所以很不灵活.所以今天就来重写一下获取实例化的方法.BeanFactory首先因为每个Bean的构造函数是不固定的,所以可以用这个方式来扩展一下getBean()public interface BeanFactory { O原创 2022-04-26 16:58:29 · 478 阅读 · 0 评论 -
Spring手撸03: 使用设计模式 实现Bean的定义/注册/获取
撸了一遍明白为什么用封装一个ApplicationContext了, 里面很多的方法继承下来, 要去调用都一脸懵逼.所以哦豁,又顿悟了一下为什么很多抽象类的那些实现好的方法要包保护了, 只给自己的子类去用, 外部是直接调用不到的.就需要ApplicationContext去封装,把这些实现的方法开放出去.先看一下整个流程之间类的关系, 这个也叫 类图补充一下这些符号的说明List item-: private+: public~: default#: protecte原创 2022-04-25 17:10:58 · 484 阅读 · 0 评论 -
手撸spring01: 创建简单Bean容器
spring是怎么去管理bean的呢?学习一下手撸spring.第一步先来简单的实现一个Bean容器的注册与获取所谓容器就是能够存储元素的结构就是容器, 例如List, Set 和Map在Spring Bean容器的场景下, 需要存放名称为索引的数据结构, HashMap就是个合适的选择, 工厂模式一般也都是这么搞的.先画个图那个Bean没有那么重要,第一步先来创建BeanDefinition,因为是简单版,一开始就只有一个bean,后续会慢慢加入其他的属性/** * 定义一个bean原创 2022-04-20 17:38:08 · 597 阅读 · 0 评论 -
Spring03: bean的生命周期; bean后处理器介入的骚操作; 模板方法设计模式
bean的生命周期是一道很常见的面试题, 用代码具象化一下,很容易就理解了.@Slf4j@Componentpublic class LifeCycleBean { public LifeCycleBean(){ log.info("构造方法,实例化"); } @Autowired public void autowired(@Value("${spring.application.name}") String name){ log.in原创 2022-04-10 16:03:06 · 374 阅读 · 0 评论 -
Spring源码02: BeanFactory实现
BeanFactory默认是由DefaultListableBeanFactory实现的直接上代码加注释public class TestFactory { public static void main(String[] args) { //刚创建是空的 DefaultListableBeanFactory beanFactory =new DefaultListableBeanFactory(); //需要去定义bean 类型 单例/多例 初始原创 2022-04-04 14:59:16 · 629 阅读 · 0 评论 -
Spring源码01: BeanFactory与ApplicationContext
在Springboot的启动类中,常常都是这么一块代码@SpringBootApplicationpublic class JavaBaseApplication { public static void main(String[] args) { SpringApplication.run(JavaBaseApplication.class, args); }}但其实这个run方法是有返回值的,返回的是ConfigurableApplicationContext原创 2022-04-01 22:07:43 · 415 阅读 · 0 评论 -
spring、spring-boot、spring-cloud、spring-cloud-alibaba学习记录
最近在学习spring-cloud+spring-boot+spring-cloud-alibaba框架,怕学一遍就忘了,所以把学过的东西都记一记端口:80这是一个HTTP(HyperText Transport Protocol)即超文本传输协议开放,当服务配置为这个端口号时,可直接免输入端口号localhost:80/consumer/payment/get/1访问如此连接时,浏览器会自动去掉80Spring-cloud微服务模块model构建流程建model改pom写yml主原创 2021-03-14 21:30:09 · 130 阅读 · 0 评论