Spring
文章平均质量分 71
Spring框架
959y
奋斗ing
展开
-
[SpringCloud] SpringCloud配置中心的核心原理
SpringCloud中配置中心的核心原理原创 2023-11-27 20:48:20 · 976 阅读 · 0 评论 -
Spring源码分析 (Spring启动过程之容器对象的创建) (十五)
spring 源码分析之启动过程的容器对象的创建过程原创 2023-01-30 19:19:02 · 1208 阅读 · 1 评论 -
Spring Tx (九) (Spring 事务源码分析)
Spring 事务源码分析原创 2022-11-01 16:43:24 · 740 阅读 · 0 评论 -
Spring Tx (八) (SpringBoot注解@Transactional 2)
Spring 注解 @Transactional原创 2022-10-31 17:45:38 · 789 阅读 · 0 评论 -
SpringBoot 扩展性接口
Spring 中的可扩展性接口原创 2022-10-12 21:40:48 · 553 阅读 · 0 评论 -
Spring中的11个扩展点
Spring 的 扩展点原创 2022-10-10 18:35:40 · 1000 阅读 · 0 评论 -
Spring源码解析 (BeanFactory和ApplicationContext的实现类) (二)
文章目录1.BeanFactory 的实现1.BeanFactory 的实现DefaultListableBeanFactory无解析@Bean. @Configuration 的功能下面代码解析:先是通过一个工具类得到BeanDefinition, 然后beanFactory 注册BeanDefinition打印出工厂种的Beanpublic class TestBeanFactory { public static void main(String[] args) {原创 2022-04-03 14:49:11 · 421 阅读 · 0 评论 -
Spring源码解析 (BeanFactory和ApplicationContext) (一)
文章目录1.BeanFactory 与 ApplicationContext 的区别和联系1.BeanFactory 与 ApplicationContext 的区别和联系可以看出ApplicationContext 间接继承了 BeanFactory原创 2022-03-31 14:52:27 · 425 阅读 · 0 评论 -
Springboot_拦截器_过滤器_监听器
文章目录1.maven仓库2.过滤器3.拦截器4.监听器4.1 监听器的使用5.实例化6.测试7.拦截器与过滤器的区别1.maven仓库<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency><dependency> <groupId>org.sp原创 2022-03-06 18:01:39 · 303 阅读 · 0 评论 -
Spring的BeanFactoryPostProcessor和BeanPostProcessor
BeanFactoryPostProcessor和BeanPostProcessor,这两个接口,都是Spring初始化bean时对外暴露的扩展点。两个接口名称看起来很相似,但作用及使用场景却不同.BeanFactoryPostProcessor和BeanPostProcessor都是后置增强器。还有一个是BeanDefinitionRegistryPostProcessorBeanPostProcessor是Bean的后置增强BeanFactoryPostProcessor和BeanDefinati原创 2022-03-05 14:39:22 · 1736 阅读 · 1 评论 -
Spring Ioc 容器的设计
文章目录1.Spring IOC容器的设计2.BeanFactory和ApplicationContext的区别3.BeanFactory容器的设计原理4.BeanFactory的详细介绍5.ApplicationContext容器的设计原理6.ApplicationContext的详细介绍7.ApplicationContext容器扩展功能详解介绍1.Spring IOC容器的设计实现BeanFactory接口的简单容器实现ApplicationContext接口的高级容器Applicati原创 2022-02-26 00:33:26 · 677 阅读 · 0 评论 -
面试_ Spring [27]
1.BeanFactory-框架基础设施BeanFactory 是 Spring 框架的基础设施,面向 Spring 本身;ApplicationContext 面向使用Spring 框架的开发者,几乎所有的应用场合我们都直接使用 ApplicationContext 而非底层的 BeanFactory。BeanDefinitionRegistry 注册表:Spring 配置文件中每一个节点元素在 Spring 容器里都通过一个 BeanDefinition 对象表示,它描述了 Bean 的配置原创 2022-02-05 21:23:58 · 492 阅读 · 0 评论 -
yml文件读取方式_2
文章目录1.SnakeYml2.jackson-dataformat-yaml3.Value4.ConfigurationProperties1.SnakeYml<dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>1.23</version></dependency>原创 2022-01-22 16:59:59 · 1325 阅读 · 0 评论 -
yml文件读取方式_1
文章目录1.Environment2.YamlPropertiesFactoryBean3.监听事件1.Environment在Spring中有一个类Environment,它可以被认为是当前应用程序正在运行的环境,它继承了PropertyResolver接口,因此可以作为一个属性解析器使用。先创建一个yml文件,属性如下:person: name: hydra gender: male age: 18使用起来也非常简单,直接使用@Autowired就可以注入到要使用的类中,然后调用它原创 2022-01-20 21:44:34 · 2005 阅读 · 0 评论 -
Spring Cloud Alibaba Gateway
文章目录1.网关简介2.常用的网关3.Gateway简介4.实战①5.实战②6.Gateway核心架构6.1 基本概念6.2 执行原理7.过滤器7.1 局部过滤器GatewayFilter7.2 全局过滤器GolbalFilter1.网关简介网关顾明思意:就是为了过滤一些不想被访问的,或者是危险的。没有网关时候的问题:客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性。认证复杂,每个服务都需要独立认证。存在跨域请求,在一定场景下处理相对复杂。网关就是为了解决这些问题而生的。所谓的原创 2022-01-05 19:14:37 · 808 阅读 · 1 评论 -
Spring Cloud Alibaba Feign
1.Feign介绍Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。2.Feign实战需求:service-hosp调用service-cmn微服务查询数据库关键字段,以呈现给前端2.1 service-cmn1 添加依赖service-cmn添加依赖原创 2022-01-04 22:22:26 · 1017 阅读 · 0 评论 -
Spring Aop (一) 自定义注解妙用
1.Aop的一些常用术语切面(Aspect):在Spring AOP中,切面可以使用通用类或者在普通类中以@Aspect 注解(@AspectJ风格)来实现连接点(Joinpoint):在Spring AOP中一个连接点代表一个方法的执行通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括"around"、"before”和"after"等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链切入点(原创 2022-01-03 19:36:56 · 3458 阅读 · 0 评论 -
面试_Spring [11]
1.谈谈Spring IOC,原理和实现1.2 底层实现2.bean的生命周期3.Spring如何解决循环依赖4.BeanFactory和FactoryBean5.Spring的设计模式6.Aop底层7.Spring事务如何回滚8.事务传播行为文章目录1.IOc原理2.底层实现3.Bean的生命周期4.循环依赖5.BeanFactory和FactoryBean6.Spring的设计模式7.Aop过程8.Spring事务如何回滚9.Spring的传播特性10.Spring的单例Bean是线程原创 2021-08-22 17:28:16 · 724 阅读 · 0 评论 -
SpringBoot自动装配原理
文章目录1.分析2.样例讲解13.样例讲解24.总结1.分析先看@SpringBootApplication@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { @Filter(type = FilterT原创 2021-12-26 23:23:46 · 335 阅读 · 0 评论 -
分布式ID生成方式
生成方式:1.UUID2.数据库自增ID3.数据库多主模式4.号段模式5.Redis6.雪花算法(SnowFlake)7.滴滴出品(TinyID)8.百度 (Uidgenerator)9.美团(Leaf)文章目录1.UUID2.数据库自增Id3.基于数据库集群模式4.基于数据库的号段模式5.Redis6.Snowflake7.百度(uid-generator)8.Leaf9.TinyId1.UUIDpublic static void main(String[] args) {原创 2021-12-24 00:21:30 · 189 阅读 · 0 评论 -
Spring Tx (七) (大事务问题)
大事务引发的问题:死锁,锁等待,回滚时间长 接口超时,数据库主从延迟,并发情况下数据库连接池被打满1.@Transactional注解是通过Spring的AOP起作用的,但是如果使用不当,事务功能可能会失效。2.@Transactional注解一般加在某个业务方法上,会导致整个业务方法都在这个事务中,粒度太大,不好控制事务范围。文章目录1.少于@Transactional注解2.将查询(select)方法放到事务外2.1 新加上一个service方法2.2 在该Service类中注入自己2.3 在该.原创 2021-12-22 22:32:31 · 1574 阅读 · 0 评论 -
Spring Tx (六) (Spring事务失效的情况)
文章目录1.访问权限问题2.方法被final修饰3.方法内部调用3.1.新增加一个service方法3.2.在该Service类中注入自己3.3.通过AopContent类4.未被spring管理5.多线程调用6.表不支持事务7.未开启事务8.错误的传播特性9.被异常吞并了10.手动抛了别的异常11.自定义了回滚异常12.嵌套事务回滚多了13.大事务问题14.编程式事务1.访问权限问题@Servicepublic class UserService { @Transactional原创 2021-12-22 19:43:14 · 975 阅读 · 0 评论 -
Spring Tx (五) (分布式事务及解决方案)
1.2PC两阶段提交mysql是通过日志系统完成事务的。就是两阶段提交:undolog和binlog的两阶段提交。两阶段协议可以用于单机集中式系统,由事务管理器协调多个资源管理器;也可以用于分布式系统,由一个全局的事务管理器协调各个子系统的局部事务管理器完成两阶段提交。第一阶段:投票阶段第二阶段:决定阶段...原创 2021-12-17 23:49:19 · 1081 阅读 · 0 评论 -
JDK.Dubbo.Spring的SPI机制对比
文章目录1.JDK SPI2.Dubbo SPI3.Spring spi4.总结1.JDK SPIJDK 中 提供了一个 SPI 的功能,核心类是 java.util.ServiceLoader。其作用就是,可以通过类名获取在META-INF/services/下的多个配置实现文件。META-INF/services/下创建一个 com.atguigu.SuperLoggerConfiguration通过 ServiceLoader 获取我们的 SPI 机制配置的实现类ServiceLoader&原创 2021-12-12 23:33:05 · 901 阅读 · 0 评论 -
Spring中的Aware作用以及源码
文章目录1.源码2.Aware调用链3.initializeBean 初始化Bean在有些场景中我们需要感知到容器的存在,需要获取容器的工具类,这个时候需要使用Spring Aware提供的工具类Spring 框架中提供许多实现Aware接口的类,这些类主要是为了辅助Spring访问容器中的数据1.源码自定义实现ApplicationContextAware接口类,然后在setApplicationContext方法打断点,debug模式下查看堆栈信息2.Aware调用链createBe原创 2021-10-03 17:26:45 · 1153 阅读 · 0 评论 -
Spring refresh() 方法详解(启动Spring,bean的创建过程)
文章目录1. this.prepareRefresh() 激活开启容器2. this.obtainFreshBeanFactory() 获取 bean 工厂3. this.prepareBeanFactory(beanFactory) 对获取到的 beanFactory 做预处理设置4. this.postProcessBeanFactory(beanFactory); beanFactory准备工作完成后进行的后置处理工作5. this.invokeBeanFactoryPostProcessors(be原创 2021-09-30 14:34:25 · 601 阅读 · 0 评论 -
面试_SpringBoot自动装配原理 [16]
1.SpringBoot自动装配原理BFPP:BeanFactoryPostProcessorBPP:BeanPostProcessorBDRPP:BeanDefinitionRegistryPostProsessor1.当启动SpringBoot程序时候,创建SpringApplication的对象,在对象的构造方法中进行对某些参数的初始化工作。最主要是的判断当前应用程序的类型与初始化器和监听器。在这个过程中会加载整个程序的spring.factories文件,将文件的内容放入缓存,方便日后获取原创 2021-09-01 11:06:55 · 424 阅读 · 0 评论 -
Bean的生命周期与用到的设计模式
1.图2.基础过程eanFactory是访问spring容器的根接口,几乎所有的bean都遵循以下生命周期。createBeanInstance 初始化populateBean 属性填充initializeBean 实例化,实例化又分为调用invokeAwareMethods方法,执行PostProcessorsBefore方法,然后调用invokeInitMethods方法,最后执行PostProcessorsAfter方法3.本质过程1.实例化Bean,反射的方式生成对象:Bean如何实原创 2021-08-20 14:38:59 · 899 阅读 · 0 评论 -
SpringSecurity_Spring整合
1.导入jar包 <packaging>war</packaging> <properties> <spring.version>5.0.5.RELEASE</spring.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.原创 2021-06-26 11:19:10 · 289 阅读 · 0 评论 -
SpringSecurity_连接数据库访问
文章目录1.引入jar包2.配置文件编写3.编写数据库4.编写实体类5.编写Mapper接口6.在业务层中引入用户的用户名和密码7.测试既然是需要连接数据库就必须引入连接数据库的框架这里选择的是mp1.引入jar包 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</arti原创 2021-06-24 14:06:59 · 309 阅读 · 0 评论 -
SpringSecurity入门
文章目录1.入门2.设置用户名和密码2.1 配置文件中设置2.2 在配置类中设置1.入门1.启动一个SpringBoot项目2.导入SpringSecurity相关依赖3.编写ControllerTestController.java@RestController@RequestMapping("/test")public class TestController { @GetMapping("/add") public String add(){ retur原创 2021-06-24 12:23:37 · 150 阅读 · 1 评论 -
Spring_aop_xml配置文件方式_AspectJ
目录结构1.Book,javapublic class Book { public void buy(){ System.out.println("buy......."); }}2.aop:BookProxy.java@Aspectpublic class BookProxy { @Pointcut("execution(* com.atguigu.spring5.aopxml.*.*(..))") public void pointCut(原创 2021-05-31 21:00:39 · 195 阅读 · 0 评论 -
Spring_JdbcTemplate_注解版
配置类:@ComponentScan("com.Zjy.jdbcTemplate")@Configurationpublic class jdbcConfig { //数据源 @Bean public DataSource dataSource()throws Exception{ ComboPooledDataSource dataSource = new ComboPooledDataSource(); dataSource.setUser.原创 2021-05-31 18:05:23 · 456 阅读 · 0 评论 -
Spring_事务管理_注解版
1.事务环境搭建UserDao.java@Repositorypublic class UserDao { @Autowired JdbcTemplate jdbcTemplate; public void insert(){ String sql = "insert into tbl_user values(null, ?, ?)"; String username = UUID.randomUUID().toString().substri原创 2021-05-28 18:33:06 · 343 阅读 · 0 评论 -
AOP完全注解开发AspectJ_2
Aop1.业务类MathAop1.javapublic class MathAop1 { public Integer add(int i, int j){ return i + j; }}2.添加的业务类log.java@Aspect//告诉Srping当前类是一个切面类public class Log { @Pointcut("execution(public Integer com.Zjy.aop.MathAop1.*(..))")原创 2021-05-28 16:19:39 · 315 阅读 · 0 评论 -
SpringBoot_Lombok_dev-tools
1.Lombok2.dev-tools文章目录1.lombok2.dev-tools1.lombok1.导入jar包 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>2.下载插件:@EqualsAnd原创 2021-05-26 17:21:33 · 204 阅读 · 0 评论 -
Spring_属性赋值_注解
属性赋值1.xml方式的属性赋值2.@Value注解Person.javapublic class Person { @Value("Zzz") private String name; @Value("#{22 - 2}") private Integer age; public Person() { } public Person(String name, Integer age) { this.name = name;原创 2021-05-25 10:33:38 · 281 阅读 · 0 评论 -
Spring_Bean的生命周期_注解方式
文章目录Bean的生命周期1.原来的xml方式2.注解@Bean3.使用JSR250中的@PostConstruct和@PreDestroy4.BeanPostProcessor后置处理器Bean的生命周期Bean从创建到初始化到销毁的过程1.原来的xml方式2.注解@Beanpublic class Car { public void init(){ System.out.println("init......."); } public void d原创 2021-05-25 10:23:24 · 490 阅读 · 1 评论 -
Spring的创建Bean的方式_注解方式
文章目录1.@Bean的方式2.@Contoller/@Repository/@Component/@Service3.@Import4.ImportSelector5.ImportBeanDefinitionRegistrar6.FactoryBeanBean为Spring的最重要没有之一。1.@Bean的方式pojo就是简单是一个javabean@Configurationpublic class MainConfig { @Bean("person")//起的别名 p原创 2021-05-21 18:50:29 · 494 阅读 · 0 评论 -
Spring_第一个简单程序基于纯注解
文件结构:这里是进行了外部注入这里是configDemo.java代替了bean.xml中的扫描@Configuration@ComponentScan(basePackages = {"com.Zjy"})public class configDemo {}如果是外部注入的话则需要加上注解@AutoWired:根据属性类型自动装配@Qualifier:根据属性名称自动注入@Resource:都可以@Value:注入普通类型属性这里的注解注入方式为@Component:普原创 2021-04-13 19:50:29 · 134 阅读 · 0 评论