Spring
文章平均质量分 79
敲代码的旺财
这个作者很懒,什么都没留下…
展开
-
SpringBoot使用grpc优雅的编译protobuf
目录一、介绍二、下载(非必要)三、idea安装protobuf插件(非必要)四、使用1、添加maven依赖2、添加maven插件3、创建定义文件4、使用maven创建对象5、直接在代码中使用一、介绍 Protocol Buffer是Google的语言中立的,平台中立的,可扩展机制的,用于序列化结构化数据 - 对比XML,但更小,更快,更简单。您可以定义数据的结构化,然后可以使用特殊生成的源代码轻松地在各种数据流中使用各种语言编写和读取结构化数据。官网地址:https://developers.goo原创 2020-09-28 13:34:29 · 1446 阅读 · 0 评论 -
Spring基于配置文件的方式来配置AOP
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.sp原创 2018-02-22 17:32:15 · 393 阅读 · 0 评论 -
全网最细致的spring源码分析(一):spring是如何获取到单例bean对象
由于bean对象的产生和获取过去繁琐,所有将bean的获取和产生分成两部分来讲,这里我们只讨论spring是如何获取到单例bean对象的。spring在缓存中获取单例bean的逻辑用于储存bean的四种不同的map: singletonObjects:用于保存BeanName和创建bean实例之间的关系,beanname->beaninstance。 ...原创 2019-03-07 17:03:32 · 1419 阅读 · 0 评论 -
全网最细致的spring源码分析(二):spring在创建bean对象的之前的骚操作
一、回顾 上回说到Spring在获取单例Bean的时候,有一种情况会调用ObjectFactory下的createBean方法创建bean。 当然不可能指望在一个方法中就完成创建bean的复杂逻辑,而且跟踪如此之多的spring代码,多多少少也能发现一些规律,一层套一层的验证判断、各种类之间的协作,直到出现一个以do开头的方法来真正的完成工作,其他的方法只是在做...原创 2019-03-28 11:25:55 · 1268 阅读 · 1 评论 -
全网最细致的spring源码分析(三):spring中的循环依赖问题与解决方法
一、什么是循环依赖 循环依赖就是在多个bean中,相互持有对方,导致在创建的时候无法加载。不如:beanA引用了beanB,beanB又应用了beanC,beanC最后又引用回了beanA,成了一个无限的循环。循环依赖是对象与对象之间才会发生的,而方法之间的相互调用的情况,叫做循环调用,此招无解最终会因为方法之间调用过多导致内存溢出。在代码中表现大概就是如下的情况:...原创 2019-03-28 16:32:10 · 2334 阅读 · 1 评论 -
全网最细致的spring源码分析(四):spring创建一个bean对象的逻辑和源码解析
spring最为基础也是极为重要的一个元素单位便是bean,bean由开发者编写的普通java类经过spring按照开发者指定的规则生成而来,作为pojo的替代对象进行使用,之前的学习中已经知道spring通过doCreateBean(final String beanName, final RootBeanDefinition mbd, final @Nullable Objec...原创 2019-07-01 16:29:51 · 424 阅读 · 0 评论 -
全网最细致的spring源码分析(五):spring的带参实例化与通用实例化(autowireConstructor AND instantiateBean)
spring中实例化对象的情况,通常分为两种,一种是通用的实例化,另一种是带有参数的实例化。带参的实例化存在着不确定性,在判断对应参数上做了大量工作,同样的实例化过程也是相当复杂。一、autowireConstructor autowireConstructor方法在ConstructorResolver类中,老规矩说明一下入参和返回值。public...原创 2019-09-03 17:26:55 · 1257 阅读 · 1 评论 -
全网最细致的spring源码分析(六):spring实例化策略
上一章节,实例化过程中反复提到实例化策略,这到底是做什么的呢?事实上,在经过前面的分析,我们已经得到了足够用于实例化的所有信息,完全可以使用最简单的反射方式直接构建实例对象,但spring却不仅仅如此。 spring初始化策略主要使用SimpleInstantiationStrategy类下的instantiate(RootBeanDefinition bd, @...原创 2019-09-04 15:59:10 · 802 阅读 · 0 评论 -
全网最细致的spring源码分析(七):属性注入
之前的源码阅读中,我们已经将spring创建bean的大致流程进行了了解,但大脑里依旧充满了各式各样的疑惑,这次我们更深一层去了解spring是如何进行属性注入的。 之前在说明依赖注入的时候其实提到属性注入的方法populateBean(String beanName, RootBeanDefinition mbd, @Nullable BeanWrapper ...原创 2019-09-09 15:08:05 · 894 阅读 · 0 评论 -
Spring切面优先级与重用切点表达式
一、切面优先级@Order(1)@Aspect@Componentpublic class LoggingAspect { }--在同一个连接点上应用不止一个切面,除非明确指定,否则它们的优先级是不确定的--切面的优先级可以通过实现Ordered接口或者利用@Order注解指定--实现Orderd接口,getOrder方法的返回值越小,优先级越高--使用@Order注解,序号写在注解中二、重...原创 2018-02-22 16:50:40 · 311 阅读 · 0 评论 -
Spring通知(前置通知,后置通知,返回通知,异常通知,环绕通知)
一、前置通知--前置通知:在方法执行之前执行的通知--前置通知使用 @Before 注解, 并将切入点表达式的值作为注解值。/** * 声明该方法是一个前置通知:在目标方法开始之前执行 */@Before("execution(public int aop.AtithmeticCalculatorImpl.*(int,int))")public void beforeMethod(JoinPoin...原创 2018-02-13 15:29:18 · 2868 阅读 · 2 评论 -
Spring表达式语言:SpEL
bean id="car" class="autowire.Car"> property name="brand" value="Audi">property> property name="price" value="300000">property> property name="tyrePerimeter" value="#{T(Main).PI原创 2018-02-01 15:47:24 · 181 阅读 · 0 评论 -
Spring管理Bean的生命周期
一、声明周期SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务SpringIOC容器对Bean的生命周期进行管理的过程: --通过构造器或者工厂方法创建Bean实例 --未Bean的属相设置值和对其他Bean的引用 --调用Bean的初始化方法 --Bean可以使用了 --当原创 2018-02-01 15:48:37 · 266 阅读 · 0 评论 -
Spring通过工厂方法配置bean
一、通过调用静态工厂方法创建Bean工厂方法:private static MapString,Car> cars = new HashMapString, Car>();static { cars.put("audi",new Car("audi","300000")); cars.put("ford",new Car("ford","400000")原创 2018-02-01 16:56:43 · 212 阅读 · 0 评论 -
通过FactoryBean来配置Bean
一、自定义FactoryBean自定义的 FactoryBean要实现Spring提供的FactoryBean接口public class CarFactoryBean implements FactoryBean{ private String brand; public void setBrand(String brand) { thi原创 2018-02-03 16:24:35 · 292 阅读 · 0 评论 -
Spring通过注解配置Bean
一、在classpath中扫描主键1.组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件。特定组件包括: --@Component:基本注解,标识了一个受Spring管理的组件 --@Respository:标识持久层组件 --@Service:标识服务层(业务层)组件 --@Controller:标识表原创 2018-02-03 16:25:39 · 465 阅读 · 0 评论 -
bean的配置
一.采用xml(反射)注入beanbean id="helloWorld" class="HelloWorld">bean>id是bean的唯一表示class是bean的全类名,通过反射的方式在ioc容器中创建bean,要求bean中必须有无参构造器ApplicationContext ctx = new ClassPathXmlApplicat原创 2018-01-29 21:59:49 · 309 阅读 · 0 评论 -
bean的自动装配
bean id="adderss" class="autowire.Address" p:city="BeiJing" p:street="HuiLongGuan">bean>bean id="car" class="autowire.Car" p:brand="Audi" p:price="300000">bean>bean id="perso原创 2018-01-30 15:16:19 · 157 阅读 · 0 评论 -
代理模式与aspectJ实现AOP
一、问题1、代码混乱:越来越多的非业务需求(日志和验证等)加入后,原有的业务方法急剧膨胀。每个方法在处理核心逻辑的同时还必须兼顾其他多个关注点2、代码分散:以日志需求为例,只是为了满足这个单一需求,就不得不在多个模块方法(方法)里多次重复相同的日志代码。如果日志需求发生变化,必修修改所有的模块。二、使用动态代理解决上述问题代理设计模式的原理:使用一个代理将对象包装起来,然后用该代理对象取代原始对象...原创 2018-02-12 17:33:37 · 1441 阅读 · 0 评论 -
bean之间的关系 继承与依赖 spring使用外部属性文件
一、继承bean id="car" class="autowire.Car" p:brand="Audi" p:price="300000">bean>bean id="car2" p:price="250000" parent="car">bean>--spring允许继承bean的配置,被继承的bean称为父bean,继承这个父bean的Bean称为子Be原创 2018-01-30 17:17:40 · 168 阅读 · 0 评论