Chao's Blog Chao's Blog
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)

~chao

永远菜鸟,不断努力~
首页
  • vue

    • vue路由
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • java
  • spring
  • springboot
  • springcloud
  • git
  • maven
  • nginx
  • tomcat
  • springmvc
  • jvm
  • 图数据库
  • mysql数据库
  • redis数据库
  • windows下docker安装nginx并挂载目录
  • linux命令
  • linux安装软件
  • linux脚本
  • idea
  • vscode
  • 归档
  • 综合项目

    • 若依项目
    • mall项目
  • java
  • mybatis
  • xxl-job
  • mybatis
GitHub (opens new window)
  • java

  • spring

    • spring 事务
    • spring生命周期
    • spring Tips
    • spring相关知识点
      • 1.什么是框架?
      • 2.谈谈你对spring的理解
      • 3.什么是ioc
      • 4.spring的四个核心包
      • 5.spring的单例是线程安全的吗?
      • 7.spring的自动注入方式有几种?
      • 8.spring类的注解有几个?
      • 9.spring注解中的#{}和${},
      • 10.@Autowired 注解
      • 11.@DependsOn注解 本身表示注入对象之间的依赖,但是它一定程度可以改变类的加载顺序,被依赖的先加载
      • 12.@import 注解
      • 13 .如何依赖外部bean
      • 14.依赖注入的两种方式
      • 15.BeanPropertyRowMapper
      • 16.声明式事务
    • 彻底搞明白Spring中的自动装配和Autowired
  • springboot

  • springcloud

  • git

  • maven

  • nginx

  • tomcat

  • springmvc

  • jvm

  • 正则表达式

  • 消息中间件

  • python

  • 后端
  • spring
~chao
2022-11-14
目录

spring相关知识点

# 1.什么是框架?

框架是一定类和接口的集合,相当于一个半成品,简化开发过程提高开发效率,让我们专注于逻辑的实现。

#

# 2.谈谈你对spring的理解

1.spring是一个轻量级,非侵入式容器框架,它是模块式的,可以引入项目中需要的模块,目的是为了解决企业级开发的复杂性(耦合问题),简化java开发
2.核心特性是ioc和aop。
spring 容器的优点:
1 、 Spring 通过 Dl 、 AOP 和消除样板式代码来简化企业级 Java 开发
2 , SPring 框架之外还存在一个构建在核心框架之上的庞大生态圈,它将 SPring 扩展到不同的领域,如 Web 服务、 REST 、移动开发以及 NOSOL
3 、低侵入式设计.代缺油污染极低
4 、独立于各种应用服务器.基于 SPring 框架的应用,可以真正实现 Write Once . Run Anywh6re 的承诺
5 , Spring 的 IoC 容即降低了业务对象替换的复杂性,提高 了组件之间的解耦
6 、 SPring 的 AOP 支持允许将一些通用任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用
7 、 SPring 的 ORM 和 OAO 提供了与第三方持久层框架的的良好整台,并简化了底层的数据库访问
8 、 SPring 的高度开放性.并不强制应用完全依赖于 SPring ,开发者可自由选用 SPring 框架的部分或全部
9 、任何一书吾言或者任祠一个框架想要立于不败之地,那么很里要的就是它的生态.

# 3.什么是ioc

ios是一种设计思想,简单来说就是 对象由spring创建、管理、装配。
如A、B两个类,传统A中要使用B,要new,在spring中,创建对象交给spring去做,叫控制反转,A中要使用B对象,需要从spring去拿,从spring注入(容器.getBean),这个叫依赖注入,ioc和di可以理解为两个动作。

# 4.spring的四个核心包

beans、core、context、spel(它对应spring-expressions)

# 5.spring的单例是线程安全的吗?

不安全,当采取单例模式时,只有一个实例,假如A方法,Person对象中name为张三,需要的入库的对象为张三,B方法中改成了李四,会造成数据脏读。protype 线程安全,默认是singleton
6.spring的注入方式?
spring默认使用无参构造注入,这个过程是无法改变的,如果想要改动,只能使用有参构造注入,有参构造可以使用静态构造方法注入,或者bean的工厂类注入。

# 7.spring的自动注入方式有几种?

三种:
1.byType
2.byName;根据set方法注入,比如说setPerson 和setPerson1
3.autowire=“constructor”构造函数注入;它首先byName注入,如果没有根据参数类型byType注入
注意构造函数的参数个数不一致,byType也注入不了。
8.当自动注入出现多个相同类型时,除了byType,byName,constructor
还可以使用primary="true" 和 auto-candicate="false"来解决,primary="true" 让此类作为注入类,auto-candidate="false" 让此类放弃自动注入的权限

# 8.spring类的注解有几个?

4个,@Controller @Service @Respository @Component

# 9.spring注解中的#{}和${},

#{}可以获取外部bean的属性值,前提是这个bean注入到了spring容器中。

# 10.@Autowired 注解

默认首先按照类型注入注解。
如果有多个类型相同,就会按照属性名字修改,下图的小写userService匹配
image.png
如果类型和名字都匹配不上,
1.可以修改bean的名字,value默认忽略
image.png
2.使用@Qualifier注解,注意Qualifier会覆盖下面的属性名字
image.png
3.设置其中一个bean为主要的自动注入bean
image.png
4.还可以使用泛型(不常用)
image.png

# 11.@DependsOn注解 本身表示注入对象之间的依赖,但是它一定程度可以改变类的加载顺序,被依赖的先加载

# 12.@import 注解

1.理论上spring只能引入一个配置类,即使用@Configuration 的类
如果一个项目中有多个配置类,可以使用import注解 把其他配置类引入到主配置类中,个人理解可以合并成一个配置类引入到spring容器中。
2.import还可以将其他类注册为bean
@Import(User.class)
image.png
3.导入多个bean,通过导入实现ImportSelector接口的类。

# 13 .如何依赖外部bean

image.png

# 14.依赖注入的两种方式

set注入,
构造器注入
15.AOP是什么
AOP是一种设计思想,在不改变原有代码的情况下,对某些与主业务没有关系的公共代码进行增强。

jdk动态代理需要被代理的类必须继承接口,cglib则不需要被代理类继承接口。
AOP会判断被代理的类是否继承了接口,如果没有继承就使用cglib,否则用jdk动态代理

通过aop实现的类,通过反射得到的类是一个代理类。

# 15.BeanPropertyRowMapper

使用BeanPropertyRowMapper自动绑定,需要确保数据库表列名称与Java实体类属性名称相同
[@Override ](/Override ) <br />public List selectUser(int uid) {<br />String sql = "SELECT * FROM user WHERE id = ?";<br />/**<br />* 带条件查询<br />*/<br />return jdbcTemplate.query(sql, new Object[]{uid}, new BeanPropertyRowMapper(Demo.class));<br />}
如果据库表列名称与Java实体类属性名称不相同
image.png
具名参数
image.png
官方推荐写法
image.png

# 16.声明式事务

1) 事务特性
image.png
2)事务分类
image.png

编辑 (opens new window)
上次更新: 2024/01/26, 05:03:22
spring Tips
彻底搞明白Spring中的自动装配和Autowired

← spring Tips 彻底搞明白Spring中的自动装配和Autowired→

最近更新
01
python使用生成器读取大文件-500g
09-24
02
Windows环境下 Docker Desktop 安装 Nginx
04-10
03
使用nginx部署多个前端项目(三种方式)
04-10
更多文章>
Theme by Vdoing | Copyright © 2022-2024 chaos | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式