Spring
文章平均质量分 68
甜瓜瓜哥
这个作者很懒,什么都没留下…
展开
-
SpringBoot和传统的Spring相比有什么区别
对于个人而言,更加倾向于使用SpringBoot,因为它能让开发者更加专注于业务代码的编写,而不需要花费大量时间在配置和环境搭建上。参考资料【Java面试】Spring Boot和传统的Spring有什么区别,你更倾向使用哪一个?原创 2023-11-22 22:20:10 · 45 阅读 · 0 评论 -
Spring复习题
以下说法错误的是()A. 使用Spring可以实现声明事务的性能B. Spring是依赖注入模式的实现C. Spring提供了AOP方式的日志系统D. Spring是一个轻量级JAVA EE的框架集合答案:C解析:spring没有提供AOP方式的日志系统,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函原创 2023-11-15 10:45:55 · 48 阅读 · 0 评论 -
Spring多线程事务能否保证事务的一致性
Spring的事务信息是存在ThreadLocal中的,所以一个线程永远只能有一个事务。因此Spring的事务是无法实现事务一致性的。这里有个事务方法A,在这个方法中创建了一个线程,线程里面去调用B。那么这个时候,A和B能保证数据的一致性或者原子性吗?也就是A失败了,B是否会正常提交。B失败了, A是否会一起回滚。答案是不能保证一致性以及原子性的。可以通过编程式事务,或者通过分布式事务的思路:二阶段提交方式。原创 2023-10-29 16:10:50 · 289 阅读 · 0 评论 -
Spring中用到的设计模式
Resource接口里面针对不同的资源设计了不同的实现类,例如ClassPathResource就是一个实现类,表示我们从ClassPath这个路径去加载资源。这里就是根据不同的条件使用不同的策略算法加载资源文件。(2)事件监听者角色:ApplicationListener-------onApplicationEvent()整合第三方框架的时候,都是用的模板模式,例如RedisTemplate。例如A和B之间有依赖关系,当A发生变化的时候,B会做出相关的反应。AOP应用的就是代理模式。原创 2023-10-25 00:20:47 · 34 阅读 · 0 评论 -
Spring是如何解决循环依赖问题的
两个或者多个Bean相互之间去持有对方的引用就会发生循环依赖。原创 2023-10-24 23:34:42 · 49 阅读 · 0 评论 -
Spring支持的几种Bean的作用域
Spring支持的几种Bean的作用域原创 2023-09-14 21:45:49 · 307 阅读 · 0 评论 -
配置Bean的方式
配置Bean的方式原创 2023-09-14 20:56:23 · 40 阅读 · 0 评论 -
什么是Spring Beans?
在Spring中,构成应用程序主干并由Spring IoC容器管理的对象称为bean。bean是一个由Spring IoC容器实例化、组装和管理的对象。原创 2023-09-14 20:47:13 · 58 阅读 · 0 评论 -
Spring启动流程
接下来就要通过prepareEnvironment方法“组装启动参数”了,首先第一步就是构造一个“可配置环境”,根据不同的Web服务类型会构造不同的环境,同样默认是Servlet,构造之后会加载很多诸如“系统环境变量”“jvm系统属性”systemProperties等在内的4组配置信息。会new一个后续会陆续使用到的“启动上下文”BootstrapContext,同时逐一调用刚刚加载的“启动注册初始化器”BootstrapRegistryInitializer中的初始化initialize方法。原创 2023-09-05 19:48:24 · 694 阅读 · 0 评论 -
Spring开发中将数据封装成请求体的意义
通过请求体传递数据,特别是使用JSON格式,可以提高代码的可读性。开发者可以直观地看到数据的结构,而不必像使用URL参数那样依赖于约定的解析顺序和规则。这使得开发者在设计API时更加灵活,可以根据实际需求传递不同的数据结构,而不必依赖于URL参数的个数和位置。将数据封装成请求体可以避免参数在URL中暴露,特别是对于一些敏感信息(如密码、密钥等)。将数据封装成请求体可以方便地传递复杂的数据结构,如JSON、XML等。来将请求体中的数据绑定到方法的参数上,从而方便地处理封装后的数据。原创 2023-07-25 17:58:36 · 55 阅读 · 0 评论 -
Spring中的自动装配模式
在使用自动装配时,要确保依赖项的bean在容器中已经定义。如果有多个bean满足自动装配条件,Spring会尝试通过不同的自动装配模式来解决冲突,但为了避免歧义,最好。在这种模式下,Spring会根据构造函数的参数类型来自动装配依赖项。(byType)来自动装配依赖项。这是Spring的默认自动装配模式,也就是不显式指定自动装配模式时采用的方式。如果找到一个与依赖项类型匹配的bean,就会自动将其注入到需要的地方。它会查找与依赖项名称匹配的bean,并将其注入到需要的地方。在这种模式下,Spring会。原创 2023-07-29 23:53:47 · 746 阅读 · 0 评论 -
@qualified的作用
在Java Spring开发过程中,“@qualified”是一个注解(Annotation),用于指定被注入的依赖对象的限定符(Qualifier)。在Spring框架中,当存在多个实现类时,通过使用“@qualified”注解可以帮助Spring容器。,但由于存在多个实现类,Spring容器无法自动确定要注入哪个实现类。注解来指定要注入的具体实现类。这样,Spring容器就能正确地将依赖注入为指定的实现类,确保在Java Spring开发过程中,依赖注入的准确性。原创 2023-07-23 20:17:03 · 479 阅读 · 0 评论 -
在项目中使用AOP进行事务管理实例
在上述例子中,我们使用了@Transactional注解来声明enterGrades方法需要进行事务管理。如果在录入成绩的过程中任何一门课程的成绩录入失败,整个操作将会回滚,保持数据的一致性。事务管理在学生成绩管理系统这样的业务场景中非常重要,它可以确保学生成绩数据的准确性和完整性,避免了潜在的数据不一致问题。而通过Spring的声明式事务管理,我们可以更加方便地实现这样的功能。原创 2023-07-22 16:39:26 · 59 阅读 · 0 评论 -
Spring容器、Servlet容器和IOC容器的区别
Spring容器是Spring框架提供的用于管理Bean的容器,实现了IOC和DI机制。Servlet容器是用于运行Java Servlet的环境,负责处理HTTP请求和响应。IOC容器是一个更一般的概念,指的是一种将对象的创建和依赖管理委托给容器的设计模式,Spring的IOC容器是其实现之一。原创 2023-07-22 16:15:03 · 364 阅读 · 0 评论 -
AOP的缺点
虽然AOP具有一些缺点,但在许多场景下,它仍然是一个有用的工具,特别是对于处理横切关注点的复杂问题时。合理地使用AOP并结合良好的代码组织和文档,可以最大限度地发挥其优点,同时尽量避免其缺点。原创 2023-07-21 18:10:18 · 397 阅读 · 0 评论 -
Spring的AOP的主要作用和具体应用场景
总的来说,AOP在Spring中的应用,能够带来更好的代码结构、更高的代码复用性和更方便的维护方式,使开发人员能够更专注于业务逻辑,而将横切关注点抽象出来交给AOP来管理。原创 2023-07-21 17:26:54 · 759 阅读 · 0 评论 -
拦截器和AOP的区别及他们均可实现鉴权
鉴权(Authorization)通常可以使用拦截器(Interceptor)或者AOP(面向切面编程)来实现,具体取决于所使用的编程语言和框架。AOP是一种编程范式,通过将横切关注点(如日志记录、事务管理、鉴权等)与主要业务逻辑进行解耦,使得系统更易于维护和扩展。在很多编程语言和框架中,都支持拦截器用于实现鉴权功能。拦截器是一种在程序执行过程中,拦截特定方法的调用并执行预先定义的逻辑的机制。在Java的Spring框架中,可以使用AOP切面来实现鉴权功能,比如。在实现鉴权时,AOP可以。原创 2023-07-21 00:14:32 · 2193 阅读 · 0 评论 -
SpringBoot怎么改打包格式
现在,你的Spring Boot应用就以WAR格式打包了,可以将该WAR文件部署到Servlet容器中,比如Tomcat。请注意,部署WAR格式的Spring Boot应用可能需要适应一些不同的配置,与JAR格式的应用有所不同。在Spring Boot中,默认的打包格式是JAR(Java ARchive)。不过,你也可以根据项目的需求选择其他的打包格式,如WAR(Web ARchive)或者WAR-over-JAR。这是为了将Spring Boot应用部署到外部的Servlet容器,比如Tomcat。原创 2023-07-20 17:11:45 · 289 阅读 · 0 评论 -
SpringAOP的实现方式和主要作用
通过将这些横切关注点与核心业务逻辑分离,使得代码更具可读性、可维护性,同时提高代码的重用性和模块化。Spring AOP 是实现面向切面编程的一种有效方式,使得开发者能够专注于业务逻辑的实现而不用过多关注横切关注点的处理。在方法执行前后进行事务的开启、提交或回滚,确保数据库的一致性和完整性。记录方法的调用和返回值,便于系统运行时进行问题排查和性能优化。记录系统运行时的日志,便于追踪问题和监控系统行为。当目标对象被代理时,AOP 拦截器会在目标对象的方法执行前、后或异常抛出时织入横切逻辑。原创 2023-07-20 16:32:37 · 40 阅读 · 0 评论 -
maven依赖包父子继承时版本不一样以子为准
如果在子模块中没有显式定义某个依赖的版本,Maven 将会使用父模块中对应依赖的版本。这样可以避免重复定义版本,使得依赖版本在整个项目中保持一致。原创 2023-07-20 11:12:28 · 1056 阅读 · 0 评论 -
Maven定位包的方法
如果需要从其他远程仓库下载依赖包,可以在项目的 pom.xml 文件中添加元素,并在其中指定所需的远程仓库。Maven 会自动处理依赖的传递性,即如果某个依赖还依赖于其他库,Maven 会递归下载并安装这些依赖。原创 2023-07-20 11:01:11 · 250 阅读 · 0 评论 -
Spring IOC容器的作用和优点
控制反转即IoC(Inversion of Control), 它把传统上由程序代码直接操控的对象调用权交给容器。通过容器来实现对象组件的装配和管理。所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。Spring IOC负责创建对象,管理对象(通过依赖注入(DI),装配对象,装配对象,配置对象,并且管理这些对象的整个生命周期)。对于IoC来说,最重要的就是容器。容器管理着Bean的生命周期,控制着Bean的依赖注入。原创 2023-07-19 19:27:23 · 144 阅读 · 0 评论 -
分布式系统中的其他重要架构组件
它可以将经常访问的数据缓存在内存中,以加快读取速度。分布式系统通常需要处理大量的数据,为了支持数据的水平扩展和高可用性,可以使用分布式数据库。分布式数据库可以将数据分片存储在多个节点上,提供数据复制和数据一致性保证。在一个典型的分布式项目中,除了服务、调用方和被调用方之外,还有一些关键组件和概念用于实现分布式系统。分布式事务管理器可以协调多个参与者的操作,以保证事务的一致性和隔离性。,以实现资源的合理利用和请求的均衡分配。为了实现服务的动态发现和调用,通常会使用服务注册与发现机制。原创 2023-07-13 23:45:30 · 224 阅读 · 0 评论 -
谈谈你对Actuator的理解
Actuator是SpringBoot中提供的四大神器之一,在单体架构架构中用到的是非常少的,但是在分布式微服务架构下就非常有用。原创 2023-07-08 17:58:03 · 101 阅读 · 0 评论 -
什么是解耦
解耦(Decoupling)是指通过降低代码之间的依赖性,减少模块或组件之间的耦合程度。在软件开发中,解耦是一种良好的设计原则,它可以提高代码的可维护性、可测试性和可扩展性。当两个模块或组件之间高度耦合时,它们的改动往往会相互影响,一个模块的修改可能会导致其他模块的变动,这增加了系统的复杂性和风险。原创 2023-07-07 18:38:08 · 7591 阅读 · 0 评论 -
AOP容器的作用
AOP容器用于实现面向切面编程的功能。AOP是一种编程范式,它允许开发人员在不修改原始代码的情况下,通过将横切关注点(如日志记录、事务管理、安全性等)从核心业务逻辑中分离出来进行管理。Spring的AOP容器是用于管理面向切面编程的功能的一部分,它可以通过配置和注解来定义和应用切面,实现横切关注点的分离和管理。原创 2023-07-07 18:30:50 · 72 阅读 · 0 评论 -
使用Spring来管理bean的优点
使用Spring来管理Bean可以提供依赖注入、松耦合、生命周期管理和AOP支持等优势,减少了开发人员的工作量,提高了代码的可维护性和可测试性。相比之下,自己手动管理Bean存在代码冗余、耦合性高、难以管理复杂依赖关系以及缺乏一致性和灵活性等缺点。原创 2023-07-07 18:20:23 · 342 阅读 · 0 评论 -
Spring中管理bean的容器-IOC容器
不管使用哪种具体的ApplicationContext实现,它们都负责创建、组装和管理应用程序中的bean,实现了IoC容器的功能。在Spring中,bean是由容器创建、组装和管理的对象。Spring容器使用依赖注入(DI)来管理bean之间的依赖关系,使得对象之间的耦合度降低,提高了代码的可维护性和可测试性。它提供了一个强大的IoC(控制反转)容器,用于管理应用程序中的对象,这个容器也称为Spring容器。它从类路径下的XML配置文件加载应用的配置信息,并根据配置文件中的定义创建和管理bean实例。原创 2023-07-07 18:13:00 · 161 阅读 · 0 评论 -
SpringBean的生命周期及其理解
比如常见的@Autowired以及setter注入等这样的一些配置形式,同时在这个阶段会触发一些扩展的调用。容器在销毁Bean的时候会调用一些方法以及BeanFactoryPostProcessor这一类的bean加载过程中的前置和后置的一些处理扩展实现。当Spring的应用上下文被关闭的时候,那么这个上下文中所有的bean会被销毁。,这个属性配置一些方法或者这个阶段会被调用,以及像BeanPostProcessors的后置处理器方法也会在这个阶段被触发。属性的一些方法,会在这个阶段被调用。原创 2023-07-03 15:33:59 · 43 阅读 · 0 评论 -
循环引用及其解决方案
这个时候会产生职这样一个问题:创建的a的原生对象会依赖一个b的代理对象,然后在创建b的时候,b的原生对象会依赖于a的代理对象。代理会把代理后的bean返回给a,a就会设置到代理后的B,而不是原始B。当我们new一个bean的时候,我们还没有给这个bean做属性填充,给这个bean做实例化,我们优先把它暴露出去。早期暴露的Bean就是这个new出来的B的实例,早期暴露的引用就是这个B。这里需要知道代理后的bean和原始的bean的对象和两个引用是不一样的。这里放的是完整的,完全被实例化后的bean。原创 2023-07-02 20:58:49 · 1611 阅读 · 0 评论 -
Spring是什么
Spring是个java企业级应用的开源开发框架。它提供了一种全面的编程和配置模型。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。一些扩展,例如beanPostProcessor和BeanFactoryPostProcessor用的比较多。Sping框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。框架 ----- 》容器 ----- 》生态。原创 2023-07-02 16:29:43 · 33 阅读 · 0 评论 -
说说你对Spring的理解?
它提供了在企业环境中接受Java语言所需的一切,并支持Groovy和kotlin作为JVM上的替代语言,并可根据应用程序的需要灵活地创建多种体系结构。Spring支持各种应用场景,在大型企业中,应用程序需要运行很长时间,而且必须运行在jdk和应用服务器上。从Spring Framework 5.0开始,Spring需要JDK 8(Java SE 8+),并且已经为JDK 9提供了现成的支持。Spring是开源的,它拥有一个庞大而且活跃的社区,提供不同范围的,真实用户的持续反馈。也有可能在云环境中。原创 2023-06-30 10:10:53 · 36 阅读 · 0 评论 -
String AOP的原理实现
如果目标类实现了接口,Spring AOP会选择使用JDK动态代理目标类。JDK动态代理的代理类根据目标类实现的接口动态生成,不需要自己编写。生成的动态代理类和目标类都实现相同的接口。如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB, 英文全称,Code Generation Library可以在运行时动态生成类的字节码,动态创建目标类的子类对象,在子类对象中增强目标类。CGLIB是通过继承的方式实现的动态代理。原创 2023-06-24 18:24:46 · 50 阅读 · 0 评论 -
@RestMapping注解
该注解是Spring框架中的一个注解,用于映射HTTP请求到相应的处理方法上。它可以应用在控制器类和方法上,用于指定处理特定URL请求的方法。原创 2023-06-06 23:28:42 · 740 阅读 · 0 评论 -
@Resource、@Inject和@Autowired的区别
@Resouce注解默认通过名称注入,如名称无法找到,则通过类型注入。这里两个名称分别是myServiceImpl01和myService02,因此通过名称来找,找不到,所以会通过类型来找。运行后会报错找到了两个。原创 2023-06-05 00:18:54 · 566 阅读 · 0 评论 -
依赖注入的方式介绍
如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性。参考资料每日一题04:依赖注入的方式有几种,各是什么?【马士兵跳槽突击班】原创 2023-06-05 00:17:35 · 78 阅读 · 0 评论 -
SpringBoot的启动机制
Import(AutoConfigurationImportSelector.class)包含一个selectImports()方法,该方法包括getAutoConfigurationEntry()方法,该方法读取classpath下的META-INF/spring.factories文件的配置,将相应的bean的配置项读取出来,通过反射机制实例化为配置文件,然后注入spring容器。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类。原创 2023-05-18 11:08:52 · 121 阅读 · 0 评论 -
Spring之AOP底层原理
在getProxy中会构造一个实现同样bean接口的代理对象,将真实bean作为代理对象中的一个成员变量。AOP功能就是通过Spring中一个专门处理AOP的“bean后置处理器”DefaultAutoProxyCreator进行方法增强的,可以算作IOC器官的附加功能。在这5个注解中使用execution表达式进行增强范围的限定,可以精确到某些类的某些方法,写了这几个简单的注解之后,Spring的AOP就生效了。,然后实例化它的对象。运行原本的Bean方法,就会在方法执行之后触发编写的增强方法。原创 2023-05-11 22:02:02 · 160 阅读 · 0 评论 -
@SpringBootApplication注解的作用
该注解是三个注解的整合,在一个类上只要加了@Spring BootApplication,就相当于同时加了以上的三个注解,当Spring容器在启动时,当解析到一个类上有@SpringBootApplication,那么就相当于这个类上有:1.@ComponentScan,从而Spring容器会进行扫描,扫描路径为当前在解析的这个类所在的包路径。2.@EnableAutoConfiguration,这个注解会负责进行自动配置类的导入,也就是将项目中的自动配置类导入到Spring容器中,从而得到解析。原创 2023-05-06 00:00:20 · 502 阅读 · 0 评论 -
Spring事务在什么情况下会失效?
因为spring事务底层使用了aop,也就是通过jdk动态代理或者cglib,帮我们生成了代理类,在代理类中实现的事务功能。因为发生了自身调用,调用该类自己的方法,而没有经过Spring的代理类,只有在外部调用事务才会生效。因为开发者自己捕获了异常,又没有手动抛出,把异常吞掉了,这种情况下spring事务不会回滚。但如果某个方法用final修饰了,那么在它的代理类中,就无法重写该方法,而添加事务功能。方法中有个判断,如果目标方法不是public,则返回null,即不支持事务。翻开源码,可以看到,在。原创 2023-04-24 00:05:32 · 648 阅读 · 0 评论