Java框架相关总结

目录

ssm原理图

springMvc的执行流程

​编辑Spring 框架中都用到了哪些设计模式?

Spring IOC容器对bean的生命周期

Spring中Bean的作用域

Spring对外提供的自动装配

Spring AOP 的实现过程

自定义aop

springboot如何解决循环依赖

springboot启动类run方法返回值

springboot自动配置具体实现步骤

springboot的自动配置

SpringBoot所具备的特征

SpringBoot 常用注解汇总

谈谈你对springcloud的理解

哪些框架用到了反射

那些框架用到了动态代理

Spring Boot 中如何解决跨域问题


ssm原理图

1. 首先浏览器上访问路径 /listCategory

2. tomcat根据web.xml上的配置信息,拦截到了/listCategory,并将其交由DispatcherServlet处理。

3. DispatcherServlet 根据springMVC的配置,将这次请求交由CategoryController类进行处理,所以需要进行这个类的实例化

4. 在实例化CategoryController的时候,注入CategoryServiceImpl。 (自动装配实现了CategoryService接口的的实例,只有CategoryServiceImpl实现了CategoryService接口,所以就会注入CategoryServiceImpl)

5. 在实例化CategoryServiceImpl的时候,又注入CategoryMapper

6. 根据ApplicationContext.xml中的配置信息,将CategoryMapper和Category.xml关联起来了。

7. 这样拿到了实例化好了的CategoryController,并调用 list 方法

8. 在list方法中,访问CategoryService,并获取数据,并把数据放在"cs"上,接着服务端跳转到listCategory.jsp去

9. 最后在listCategory.jsp 中显示数据)

SSM框架原理【超级详细】_ssm工作原理_小智解说的博客-CSDN博客

springMvc的执行流程

Spring 框架中都用到了哪些设计模式?

(1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;

(2)单例模式:Bean默认为单例模式。

(3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术

(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新

Spring IOC容器对bean的生命周期

通过构造器或工厂方法创建bean实例

为bean的属性设置值和对其他bean的引用

调用bean的初始化方法

bean可以正常使用

当容器关闭时,调用bean的销毁方法

Spring中Bean的作用域

1)singleton:单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域。

2)prototype:原型模式,可创建多个Bean实例,每次返回的都是一个新的实例

3)request: 每次HTTP请求会创建一个新的Bean,仅在当前 HTTP Request内有效。

4)session: 同一个Session共享一个Bean实例。不同Session使用不同的实例,该作用域仅在当前 HTTP Session 内有效。

5)global Session:在一个全局HTTP Session 中,所有Session共享一个Bean实例

singleton 和 prototype 是最常用的两种

Spring中Bean的作用域_智慧浩海的博客-CSDN博客

Spring对外提供的自动装配

byName, byType, constructor, autodetect , no

https://code84.com/920329.html

Spring AOP 的实现过程

Spring AOP的底层有2种实现:JDK动态代理、CGLIB

前者的原理是JDK反射,并且只支持Java接口的代理;

后者的原理是继承(extend)与覆写(override),因此能支持普通的Java类的代理。两种方式都是动态代理,即运行时实时生成代理

区别于前两者,AspectJ是一种静态代理的实现,即在编译时或者载入类时直接修改被代理类文件的字节码,而非运行时实时生成代理。因此这种方式需要额外的编译器或者JVM Agent支持,通过一些配置SpringAspectJ也可以配合使用。

JDK动态代理实现原理:通过实现InvocationHandlet接口创建自己的调用处理器;

通过为Proxy(代理角色)类指定ClassLoader对象和一组interface来创建动态代理;

通过反射机制获取动态代理类的构造函数,其唯一参数类型就是调用处理器接口类型;

通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数参入;

JDK动态代理是面向接口的代理模式,如果被代理目标没有接口那么Spring也无能为力,Spring通过Java的反射机制生产被代理接口的新的匿名实现类,重写了其中AOP的增强方法

CGLib动态代理是一个强大、高性能的Code生产类库,可以实现运行期动态扩展java类,Spring在运行期间通过 CGlib继承要被动态代理的类,重写父类的方法,实现AOP面向切面编程呢。

两者对比:JDK动态代理是面向接口的。

CGLib动态代理是通过字节码底层继承要代理类来实现(如果被代理类被final关键字所修饰,会失败)。

如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spirng默认采用JDK动态代理实现机制);

如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理

Spring事务与JDK/CGLIB动态代理_成功人士从不写博客的博客-CSDN博客

自定义aop

https://www.cnblogs.com/dubhlinn/p/10708454.html

springboot如何解决循环依赖

Spring靠提前暴露创建中的单例实例,来解决单例模式下的循环依赖

构造函数注入: 在构造函数中注入依赖项,而不是在属性中注入。

Setter注入: 使用setter方法注入依赖项,而不是在构造函数中注入。

延迟注入: 使用@Lazy注解延迟加载依赖项。

@Autowired注解的required属性: 将required属性设置为false,以避免出现循环依赖问题。

@DependsOn注解: 使用@DependsOn注解指定依赖项的加载顺序,以避免出现循环依赖问题

springboot如何解决循环依赖_mere6的博客-CSDN博客

springboot启动类run方法返回值

是ConfigurableApplicationContext ,即可配置的应用上下文,参数列表第一个参数是泛型的 Class 类型参数,用于指定加载的启动类,第二个参数是一个String类型的可变参数,用于传递整个应用程序的相关参数

springboot自动配置具体实现步骤

springboot的自动配置

通过@EnableAutoConfiguration注解开启自动配置,对jar包下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器

SpringBoot所具备的特征

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置

三个特性: 自动配置,起步依赖, 辅助功能

SpringBoot 常用注解汇总

@SpringBootApplication, @SpringBootConfiguration, @EnableAutoConfiguration , @ComponentScan @Controller,@RestController  复合注解

@RequestBody,@RequestMapping,@GetMapping ,@PostMapping

@Repository,@Service,@Scope作用域注解,@Entity实体类注解,@Bean产生一个bean的方法,@Autowired 自动导入,@Component

,@ControllerAdvice 统一处理异常 @ExceptionHandler 注解声明异常处理方法

谈谈你对springcloud的理解

「面试必背」Spring Cloud面试题(2022最新版)_springcloud面试题_柚子茶1990的博客-CSDN博客

哪些框架用到了反射

JDBC中,利用反射动态加载了数据库驱动程序

Web服务器中利用反射调用了Sevlet的服务方法(service)。

开发工具利用反射动态解析对象的类型与结构,动态提示对象的属性和方法。

Spring mybatis框。注入属性,调用方法也会用到。

那些框架用到了动态代理

使用了动态代理的场景:Spring中AOP 的实现原理、RPC远程调用、Java 注解对象获取、日志框架、全局性异常处理、事务处理、权限管理、MyBatis的Mapper层接口

Spring Boot 中如何解决跨域问题

实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值