自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 Spring Bean

Spring容器管理着一个或多个Bean。这些Bean是容器根据配置元数据创建出来的。在容器中,这些Bean定义被表示为。在容器中每个Bean必须有一个唯一的标识符,可以有多个别名。如果不指定,容器会为该Bean生成一个唯一的名称。用静态工厂方法进行实例化。用实例工厂方法进行实例化。确定Bean的运行时类型。用构造函数进行实例化。

2023-12-16 10:21:17 337

原创 Spring容器

是一个高级工厂的接口,能够维护不同Bean及其依赖关系的注册表。BeanFactory接口是顶层接口,提供了配置框架的基本功能;可以读取Bean的定义(definition)并访问它们。包是Spring Framework的IoC容器的基础。被创建和初始化后,就可以获得一个配置好的可执行系统。的一个子接口,增加了更多的企业特定功能。容器负责:实例化、配置和组装bean。,可以检索到Bean的实例。容器通过读取配置元数据,在。// 创建和配置bean。// 检索配置的实例。// 使用配置的实例。

2023-12-16 09:29:35 345

转载 3.接口测试利器

SpringMVC系列或者是SpringBoot系列中都会有大量的案例,这些案例都需要运行来验证效果,所以急需一款高效的接口测试工具。可能大家用的比较多的是swagger或者postman,这2个确实不错,不过今天今天给大家推荐一种更简单的接口测试工具。

2023-12-13 19:19:49 18

转载 2.@Controller、@RequestMapping

RequestMaping中value、path、consumers、producers稍微用到的多一些,其他几个属性用到的比较少,了解即可。关于6种规则,大家可以自己去试试,会springboot的朋友,可以直接使用springboot快速写一些用例结合postman测试下,加深记忆和理解。

2023-12-13 19:17:15 13

转载 1.Helloword

本文主要通过一个案例详细介绍了springmvc开发项目的一个过程,大家把案例敲一遍,有问题,欢迎留言交流。

2023-12-13 19:03:11 18

转载 15.代理详解(java动态代理&CGLIB代理)

jdk动态代理只能为接口创建代理,使用上有局限性。实际的场景中我们的类不一定有接口,此时如果我们想为普通的类也实现代理功能,我们就需要用到cglib来实现了。cglib是一个强大、高性能的字节码生成库,它用于在运行时扩展Java类和实现接口;本质上它是通过动态的生成一个子类去覆盖所要代理的类(非final修饰的类和方法)。Enhancer可能是CGLIB中最常用的一个类,和jdk中的Proxy不同的是,Enhancer既能够代理普通的class,也能够代理接口。

2023-12-12 18:11:50 22

转载 14.lookup-method和replaced-method比较陌生,怎么玩的?

lookup-method:方法查找通常情况下,我们使用的bean都是单例的,如果一个bean需要依赖于另一个bean的时候,可以在当前bean中声明另外一个bean引用,然后注入依赖的bean,此时被依赖的bean在当前bean中自始至终都是同一个实例。先来个案例回顾一下package com.javacode2018.lesson001.demo13.normal; public class ServiceA { }package com.javacode2018.

2023-12-12 18:10:31 25

转载 13.使用继承简化bean配置(abstract & parent)

bean元素的abstract属性为true的时候可以定义某个bean为一个抽象的bean,相当于定义了一个bean模板,spring容器并不会创建这个bean,从容器中查找abstract为true的bean的时候,会报错BeanIsAbstractException异常bean元素的parent属性可以指定当前bean的父bean,子bean可以继承父bean中配置信息,也可以自定义配置信息,这样可以覆盖父bean中的配置。

2023-12-12 18:09:20 16

转载 12.lazy-init:bean延迟初始化

延迟初始化的bean无法在程序启动过程中迅速发现bean定义的问题,第一次获取的时候可能耗时会比较长。在实际工作中用的比较少,作为了解,以后碰到的时候会有个印象。

2023-12-12 18:08:08 15

转载 11.bean中的autowire-candidate属性又是干什么的?

上一篇文章primary可以解决什么问题?中遇到的问题我们再来回顾一下,当容器中某种类型的bean存在多个的时候,此时如果我们从容器中查找这种类型的bean的时候,会报下面这个异常:原因:当从容器中按照类型查找一个bean对象的时候,容器中却找到了多个匹配的bean,此时spring不知道如何选择了,处于懵逼状态,就会报这个异常。这种异常主要出现在2种场景中:从容器容器中查找符合指定类型的bean,对应BeanFactory下面的方法:场景2:自动注入方式设置为byType的时候,如

2023-12-12 18:07:08 17

转载 10. primary可以解决什么问题?

当从容器中查找一个bean的时候,如果容器中出现多个Bean候选者时,可以通过primary=”true”将当前bean置为首选者,那么查找的时候就会返回主要的候选者,否则将抛出异常。

2023-12-12 18:06:05 13

转载 9.depend-on干什么的?

无依赖的bean创建顺序和定义的顺序一致,销毁顺序刚好相反通过构造器强依赖的bean,会先创建构造器参数中对应的bean,然后才会创建当前bean,销毁顺序刚好相反depend-on可以指定档期bean依赖的bean,通过这个可以确保depend-on指定的bean在当前bean创建之前先创建好,销毁顺序刚好相反。

2023-12-12 18:05:04 10

转载 8.依赖注入之自动注入(autowire)详解

xml中手动注入存在的不足之处,可以通过自动注入的方式来解决,本文介绍了3中自动注入:通过名称自动注入、通过类型自动注入、通过构造器自动注入按类型注入中有个比较重要的是注入匹配类型所有的bean,可以将某种类型所有的bean注入给一个List对象,可以将某种类型的所有bean按照bean名称->bean对象的映射方式注入给一个Map对象,这种用法比较重要,用途比较大,要掌握spring中还有其他自动注入的方式,用起来会更爽,后面的文章中我们会详细介绍。

2023-12-12 18:04:03 36

转载 7.依赖注入之手动注入

本文主要讲解了xml中bean的依赖注入,都是采用硬编码的方式进行注入的,这种算是手动的方式注入普通类型通过value属性或者value元素设置注入的值;注入对象如果是容器的其他bean的时候,需要使用ref属性或者ref元素或者内置bean元素的方式还介绍了其他几种类型List、Set、Map、数组、Properties类型的注入,多看几遍加深理解后面我们将介绍spring为我们提供的更牛逼的自动注入。

2023-12-12 18:02:50 25

转载 6.bean作用域scope详解

有时候,spring内置的几种sope都无法满足我们的需求的时候,我们可以自定义bean的作用域。我们来看一下这个接口定义/*** 返回当前作用域中name对应的bean对象* name:需要检索的bean的名称* objectFactory:如果name对应的bean在当前作用域中没有找到,那么可以调用这个ObjectFactory来创建这个对象**//*** 将name对应的bean从当前作用域中移除**/@Nullable/**

2023-12-12 18:01:36 64

转载 5.容器创建bean实例有多少种?

创建一个静态工厂类,用于生成UserModel对象。/*** 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!*//*** 静态无参方法创建UserModel* @return*/userModel.setName("我是无参静态构造方法创建的!");/*** 静态有参方法创建UserModel* @param name 名称* @param age 年龄* @return*/

2023-12-12 18:00:25 16

转载 4.xml中bean定义详解

当id存在的时候,不管name有没有,取id为bean的名称当id不存在,此时需要看name,name的值可以通过或者空格分割,最后会按照分隔符得到一个String数组,数组的第一个元素作为bean的名称,其他的作为bean的别名当id和name都存在的时候,id为bean名称,name用来定义多个别名当id和name都不指定的时候,bean名称自动生成,生成规则下面详细说明本文主要介绍了xml bean的定义,名称和别名的使用,通过import元素引入外部配置文件。

2023-12-12 17:59:01 12

转载 3.Spring容器基本使用及原理

本文主要介绍了spring容器的概念、bean的概念、常见的spring容器,以及spring容器的使用步骤;下一篇我们将详解bean的定义。

2023-12-12 17:56:23 19

转载 2.控制反转(IoC)与依赖注入(DI)

IOC控制反转,是一种设计理念,将对象创建和组装的主动控制权利交给了spring容器去做,控制的动作被反转了,降低了系统的耦合度,利于系统维护和扩展,主要就是指需要使用的对象的组装控制权被反转了,之前是自己要做的,现在交给spring容器做了。DI依赖注入,表示spring容器中创建对象时给其设置依赖对象的方式,通过某些注入方式可以让系统更灵活,比如自动注入等可以让系统变的很灵活,这个后面的文章会细说。spring容器:主要负责容器中对象的创建、组装、对象查找、对象生命周期的管理等等操作。

2023-12-12 17:54:11 20

转载 1.Spring是什么?我们为什么要学习它?

spring是一个简化java企业级开发的一个框架,内部包含了很多技术,比如:控制反转&依赖注入、面向切面编程、spring事务管理、通过spring集成其他框架、springmvc、springboot、springcloud等等,这些都是围绕简化开发展开的技术,后面会对每个知识点详细介绍。

2023-12-11 18:48:47 12

转载 57.Spring常用工具类

获取被代理对象的 class。获取当前对象的代理对象。

2023-12-11 18:41:47 11

转载 56.面试官:循环依赖不用三级缓存可以么?

A依赖于B,B依赖于A,比如下面代码今天的内容有点多,大家慢慢消化,有问题欢迎留言!

2023-12-11 18:37:30 32

转载 55.Spring上下文生命周期

接口表示spring上下文,下面2个实现类本文详细介绍了spring应用上下文的生命周期,非常重要,内容和细节稍微比较多,建议大家结合源码多看几遍,平时闲的时候,也可以回头再看几遍,加深理解,有问题的欢迎留言交流。

2023-12-11 18:34:57 10

转载 54.集成junit

1、本文详细介绍了junit的用法,常用的注解有@Test、@BeforeClass、@AfterClass、@Before、@After、@Ignore、@RunWith,这些都要掌握2、spring中集成junit,主要的配置就是在测试类上面需要加上下面代码3、开发工具中使用junit更容易。

2023-12-11 18:32:22 13

转载 53.Spring集成MyBatis

需要修改MainConfig中SqlSessionFactoryBean的定义,如下,更简洁了,不需要在指定mapper xml的位置了,这里需要注意一点,方式2中将mapper xml文件和mapper接口放在一个目录的时候,这2个文件的名字必须一样,这样在定义SqlSessionFactoryBean的时候才不需要指定mapper xml的位置。@Bean。

2023-12-11 18:29:41 15

转载 52.Spring实现数据库读写分离

test3方法中会调用this.userService.test1(1, DsType.SLAVE),要求走从库,再来看看userService.test1的方法,如下,比较特殊,有事务嵌套,有3次查询,第1次和第3次都在test1这个事务中运行,用的是同一个连接,都走的从库,而中间的一次查询调用的是。大多数系统都是读多写少,为了降低数据库的压力,可以对主库创建多个从库,从库自动从主库同步数据,程序中将写的操作发送到主库,将读的操作发送到从库去执行。

2023-12-11 18:27:15 24

转载 51.Spring事务失效常见的几种情况

这算是spring事务第9篇文章了,花了这么多篇文章介绍事务这块的知识,说明事务这块的东西确实比较多、知识点比较细,也非常重要,希望大家能够重视起来,吃透这块的知识。

2023-12-11 18:25:52 14

转载 50.Spring事务拦截器顺序如何控制?

咱们知道 Spring 事务是通过aop的方式添加了一个事务拦截器,事务拦截器会拦截目标方法的执行,在方法执行前后添加了事务控制。那么spring事务拦截器的顺序如何控制呢,若我们自己也添加了一些拦截器,此时事务拦截器和自定义拦截器共存的时候,他们的顺序是怎么执行的?如何手动来控制他们的顺序??可能有些朋友会问,控制他们的顺序,这个功能有什么用呢?为什么要学这个学会了这些,你可以实现很多牛逼的功能,比如1、读写分离2、通用幂等框架3、分布式事务框架对这些有兴趣么?那么咱们继续。

2023-12-11 18:23:25 18

转载 49.实战篇:手把手带你实现事务消息!

好了,今天的内容就到此就讲完了,我们一块来总结回顾一下,你需要重点掌握的内容。1、消息投递的5种方式的推演,要熟练掌握其优缺点2、方式4中事务消息的代码实现,需要大家掌握消息服务使用频率挺高的,通常作为系统中的基础服务使用,大家可以尝试一下开发一个独立的消息服务,提供给其他服务使用。

2023-12-11 18:20:38 21

转载 48.@Transaction 事务源码解析

大家好,今天咱们通过源码来了解一下spring中@Transaction事务的原理。

2023-12-11 18:19:15 13 1

转载 47.Spring事务源码解析

事务启动的过程中需要定义事务的一些配置信息,如:事务传播行为、隔离级别、超时时间、是否是只读事务、事务名称,spring中使用TransactionDefinition接口表示事务定义信息,下面看一下TransactionDefinition接口源码,主要有5个信息事务传播行为事务隔离级别事务超时时间是否是只读事务事务名称//传播行为:REQUIRED//传播行为:REQUIRED//传播行为:REQUIRED//传播行为:REQUIRED。

2023-12-11 18:15:48 15 1

转载 46.Spring如何管理多数据源事务?

如下面代码,有2个数据源分别连接数据库ds1和ds2,然后为每个数据源定义了1个事务管理器,此时spring容器中有2个数据源和2个事务管理器。//数据源1@Bean//事务管理器1,对应数据源1@Bean//数据源2@Bean//事务管理器2,对应数据源2@Bean1、本文介绍了多数据源事务的使用,2个步骤:先为每个数据源定义一个事务管理器,然后在@Transactional中指定具体要使用哪个事务管理器。2、

2023-12-11 18:13:55 38 1

转载 45.详解Spring事务中7种传播行为

事务的传播行为用来描述:系统中的一些方法交由spring来管理事务,当这些方法之间出现嵌套调用的时候,事务所表现出来的行为是什么样的?比如下面2个类,Service1中的m1方法和Service2中的m2方法上面都有@Transactional注解,说明这2个方法由spring来控制事务。但是注意m1中2行代码,先执行了一个insert,然后调用service2中的m2方法,service2中的m2方法也执行了一个insert。那么大家觉得这2个insert会在一个事务中运行么?

2023-12-11 18:11:52 18 1

转载 44.Spring声明事务怎么用的?

所谓声明式事务,就是通过配置的方式,比如通过配置文件(xml)或者注解的方式,告诉spring,哪些方法需要spring帮忙管理事务,然后开发者只用关注业务代码,而事务的事情spring自动帮我们控制。比如注解的方式,只需在方法上面加一个注解,那么方法执行之前spring会自动开启一个事务,方法执行完毕之后,会自动提交或者回滚事务,而方法内部没有任何事务相关代码,用起来特别的方法。

2023-12-11 18:07:09 23 1

转载 43.Spring中编程式事务怎么用的?

通过硬编码的方式使用spring中提供的事务相关的类来控制事务。大家看了之后,会觉得这样用好复杂啊,为什么要这么玩?的确,看起来比较复杂,代码中融入了大量spring的代码,耦合性比较强,不利于扩展,本文的目标并不是让大家以后就这么用,主要先让大家从硬编码上了解spring中事务是如何控制的,后面学起来才会更容易。我们用的最多的是声明式事务,声明式事务的底层还是使用上面这种方式来控制事务的,只不过对其进行了封装,让我们用起来更容易些。下篇文章将详解声明式事务的使用。

2023-12-11 17:44:13 20 1

转载 42.JdbcTemplate实现增删改查如此简单?

大家来回顾一下,java中操作db最原始的方式就是纯jdbc了,是不是每次操作db都需要加载数据库驱动、获取连接、获取PreparedStatement、执行sql、关闭PreparedStatement、关闭连接等等,操作还是比较繁琐的,spring中提供了一个模块,对jdbc操作进行了封装,使其更简单,就是本文要讲的JdbcTemplate,JdbcTemplate是Spring对JDBC的封装,目的是使JDBC更加易于使用。下面我们来看一下JdbcTemplate到底怎么玩的?

2023-12-10 16:03:15 17 1

转载 41.@EnableCaching集成redis缓存

上篇文章主要介绍了,不过文中的案例都是以本地内存作为存储介质的,但是实际上我们的项目上线之后,基本上都会采用集群的方式进行部署,如果将数据存储在本地内存中,集群之间是无法共享的,我们可以将数据存储在redis中,从而实现缓存的共享,下面我们一起来看下。

2023-12-10 15:56:21 25 1

转载 40.缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)

key属性用来指定Spring缓存方法的返回结果时对应的key的,上面说了你可以将Cache理解为一个hashMap,缓存以key->value的形式存储在hashmap中,value就是需要缓存值(即方法的返回值)key属性支持SpEL表达式;当我们没有指定该属性时,Spring将使用默认策略生成key(org.springframework.cache.interceptor.SimpleKeyGenerator),默认会方法参数创建key。

2023-12-10 15:52:34 26 1

转载 39.强大的Spel表达式

Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能完美整合,如能用来配置Bean定义。表达式语言给静态Java语言增加了动态功能。SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用。

2023-12-09 19:07:39 28

转载 38.@Scheduled & @EnableScheduling定时器详解

定时器默认情况下使用下面的线程池来执行定时任务的只有一个线程,相当于只有一个干活的人,如果需要定时执行的任务太多,这些任务只能排队执行,会出现什么问题?如果有些任务耗时比较长,导致其他任务排队时间比较长,不能有效的正常执行,直接影响到业务。看下面代码,2个方法,都使用了,表示每秒执行一次,而push1方法中模拟耗时2秒,方法会中打印出线程名称、时间等信息,一会注意观察输出@Component//推送方法,每秒执行一次//休眠2秒,模拟耗时操作。

2023-12-09 19:03:28 32

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除