栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

谈谈你对Spring的理解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

谈谈你对Spring的理解

目录

Spring两大核心,IOC和AOP

Aop的实现原理

Spring基于xml注入bean的几种方式:

Spring的自动装配

Spring的bean加载过程

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

Spring常用注解:


Spring两大核心,IOC和AOP

Ioc就是控制反转:

像我们之前开发,想创建对象就new一个。想要在对象里创建方法和变量,就在对象内部创建成员变量。但是现在我们想用这个类的对象,可以再spring里配置一个bean,指定对应全路径名称,spring通过配置文件用反射的方式,可以直接帮我们获取到这个类的对象。

依赖注入由三种方式:set注入,构造器注入,注解注入(注解有@Autowird[由Spring提供的] 默认按类型注入,@Resouce[由jdk提供的]默认按名称注入)。

AOP就是面向切面:

Aop是面向切面编程,在不改变源代码的情况下,对代码做增强,具体就是说一个切点,一个切面。切点就是在哪里添加业务,切面就是在指具体的业务,Aop常用于处理事务和日志记录(理解:将我常用的方法抽成工具类,哪里需要哪里调用)

Aop的实现原理

首先通过aop配置切面以及切面的增强逻辑,当sping的容器中目标类的对象的方法被调用时,aop框架就会拦截此次调用,aop框架会帮你生成一个动态代理对象,先运行增强类中的前置增强方法,在运行原业务方法,最后再运行增强类的后置增强方法

注意:aop默认是通过jdk提供proxy来生成动态代理对象,但是也可以手动指定使用cglib来生成动态代理对象。

Spring AOP的底层都是通过代理来实现的

  • 一种是基于JDK的动态代理
  • 一种是基于CgLIB的动态代理

jdk的动态代理和cglib动态代理有什么区别?

jdk的动态代理要求业务类必须得实现业务接口,底层是通过生成业务接口得动态代理来实现类来完成功能增强

cglib不需要业务类实现接口,底层是通过衍生出当前业务类的子类对象来完成功能增强

Spring基于xml注入bean的几种方式:

Set()方法注入

构造器注入:1.通过index设置参数的位置,2.通过type设置参数类型

静态工厂注入

实例工厂

Spring的自动装配

byname:通过bean的名称进行自动装配

byType:通过参数的数据类型进行自动装配

@Autowired可用于:构造函数,成员变量,Setter方法

@Autowired和@Resource之间的区别:

@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在(可以设置它required属性为false)

@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入

Spring的bean加载过程

1获取 BeanName,对传入的 name 进行解析,转化为可以从 Map 中获取到 BeanDefinition 的 bean name。

2合并 Bean 定义,对父类的定义进行合并和覆盖,如果父类还有父类,会进行递归合并,以获取完整的 Bean 定义信息。

3实例化,使用构造或者工厂方法创建 Bean 实例。

属性填充,寻找并且注入依赖,依赖的 Bean 还会递归调用 getBean 方法获取。

4初始化,调用自定义的初始化方法。

5获取最终的 Bean,如果是 FactoryBean 需要调用 getObject 方法,如果需要类型转换调用 TypeConverter 进行转化。

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

工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;
单例模式:Bean默认为单例模式。
代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;
模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。
观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring中listener的实现–ApplicationListener

Spring常用注解:

@service:业务逻辑

@Transaction:事物的注解

@Controller:声明控制器

@Autowired:自动注入

有时候需要注入DAO的话还会用到@Repository对应数据访问层bean)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603328.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号