Spring 基础知识

基础方面

SpringBoot常用注解
https://blog.csdn.net/m0_57485150/article/details/128325161

@Resource

@Resource(name = “beanId”),是跟 @Component的属性值相关联的,因为 @Resource注解只能出现在属性上和setter方法上。

SpringBoot中使用@Value注解来设置默认值

使用 ${propertyName:defaultValue} 语法为基本类型和字符串类型的属性设置默认值。

@Value("${name:admin}")
public String name;

====================================================================

Qualifier

1.给UserDao取对象名

@Repository("userDao")
public class UserDaoImpl implements UserDao{ }

2.使用@Qualifier通知@Autowired 注解,注入对象名为userDao的对象

@Autowired
@Qualifier("userDao")//即把属性userDao的注入到userDao的值中去
private UserDao userDao;

三层架构 View(视图层)->Controller层(控制值)–>Service层(服务层)–>DAO层(持久层)+ entity(实体层)
与@Component相同注解含义的注解
@Service 业务层组件
@Controller 控制层组件
@Repository 数据层组件


##### 自动扫描包
SpringBoot启动类自动扫描包 三种方式
https://blog.csdn.net/Bejpse/article/details/126511485

Spring Framework

Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以整合众多Web框架使用。

Spring Framework共有12个组件,真正核心组件有3个:SpringCore、Contenxt 和 Bean。它们为Spring打下了基础,支撑了Spring的框架结构。Spring的其他功能特性,如Web、AOP、JDBC等都是基于它而开发的。

Spring是一个基于控制反转和面向切面的容器框架。
Spring框架主要由七部分组成,分别是 Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web 和 Spring Web MVC。
Spring框架总体架构图

核心容器(Core Container)
AOP(Aspect Oriented Programming)
设备支持(Instrmentation)
数据访问及集成(Data Access/Integeration)
Web报文发送(Messaging)
Test测试
Spring 的核心?

容器,是Spring框架最核心的部分。容器管理着Spring应用中bean的创建、配置和管理。
https://www.cnblogs.com/walkinhalo/p/9601226.html
https://www.cnblogs.com/vince66/p/9244580.html

IoC 与 DI

IoC 控制反转(Inversion of Control),不是什么技术,是一种设计思想。

DI 依赖注入(Dependency Injection),是组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。

IoC 是将对象的创建的权力及对象的生命周期的管理过程交由Spring框架来处理,从此在开发过程中不在需要关注对象的创建和生命周期的管理,而是在需要的时候由Spring框架提供,这个由Spring框架管理对象创建和生命周期的机制称之为控制反转
而在创建对象的过程中Spring可以依据配置对象的属性进行设置,这个过程称之为依赖注入

Spring的核心是IOC,作用有三:
1.创建对象;
2.管理对象的依赖关系;
3.避免了大量单例模式和工厂模式的泛滥。

容器 Spring Context

容器和应用上下文

容器是Spring框架实现功能的核心,它负责了对象整个的生命周期的管理——创建、装配、销毁。

容器通过DI管理Spring应用的对象。Spring负责应用程序中对象的创建,依赖关系,组装与配置。Spring中的容器有多种,大致可以分为BeanFactory工厂类和ApplicationContext应用上下文两大类。BeanFactory 提供了基本的DI支持,ApplicationContext 基于BeanFactory构建, 提供应用框架级别的服务。

DI只描述对象的创建方式,不负责创建.

Tomcat正是一个运行Servlet的web容器,而Spring要想实现依赖注入功能,就离不开对象生产的容器。关于Spring的这个容器你最常听到就是IOC容器。

实际上,容器里面什么都没有,决定容器里面放什么对象的是我们自己,决定对象之间的依赖关系的,也是我们自己,容器只是给我们提供一个管理对象的空间而已。那么,我们怎么向容器中放入我们需要容器代为管理的对象呢?这就涉及到Spring的应用上下文了。

Bean的生命周期

1.bean实例化
2.bean注入属性
3.调用BeanNameAware.setBeanName()
4.调用BeanFactoryAware.setBeanFactory()方法
5.调用ApplicatioonContextAware.setApplicationContext()方法
6.调用BeanPostProcessor.postProcessBeforeInitializaion()方法
7.调用InitializingBean.afterPropertiesSet()方法,如果使用init-method声明了初始化方法,则也会调用初始化方法
8.调用BeanPostProcessor.postProcessAfterInitialization()方法
9.bean就绪,存在上下文中
10.调用DisposableBean.destroy()方法, 如果destroy-method方法被声明, 也同时调用

ApplicationContextAware接口

一、这个接口有什么用?
当一个类实现了ApplicationContextAware 接口,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取Spring配置文件中,所有有引用到的Bean对象。
http://blog.csdn.net/kaiwii/article/details/6872642

ApplicationContext

概念:应用上下文(org.springframework.context.ApplicationContext),继承自BeanFactory。
作用:提供了更多面向应用的功能,比如国际化支持、框架事件体系,更易于创建实际应用。(实际应用一般是用它)

应用上下文,就是将你需要Spring帮你管理的对象放入容器的一种容器对象,应用上下文即是Spring容器的一种抽象化表述;而我们常见的ApplicationContext本质上说就是一个维护Bean定义以及对象之间协作关系的高级接口。这里,我们必须明确,Spring的核心是容器,而容器并不唯一,框架本身就提供了很多个容器的实现,大概分为两种类型:一种是不常用的BeanFactory,这是最简单的容器,只能提供基本的DI功能;还有一种就是继承了BeanFactory后派生而来的应用上下文,其抽象接口也就是我们经常用的ApplicationContext,它能提供更多企业级的服务,例如解析配置文本信息等等,这也是应用上下文实例对象最常见的应用场景。有了上下文对象,我们就能向容器注册需要Spring管理的对象了。对于上下文抽象接口,Spring也为我们提供了多种类型的容器实现,供我们在不同的应用场景选择——
  ① AnnotationConfigApplicationContext:从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式;
  ② ClassPathXmlApplicationContext:从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式;
  ③ FileSystemXmlApplicationContext:从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘符中加载xml配置文件;
  ④ AnnotationConfigWebApplicationContext:专门为web应用准备的,适用于注解方式;
  ⑤ XmlWebApplicationContext:从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式。
  有了以上理解,问题就很好办了。你只要将你需要IOC容器替你管理的对象基于xml也罢,java注解也好,总之你要将需要管理的对象(Spring中我们都称之问bean)、bean之间的协作关系配置好,然后利用应用上下文对象加载进我们的Spring容器,容器就能为你的程序提供你想要的对象管理服务了。

ApplicationContext:核心接口定义.继承了环境信息,工厂信息,事件发布,资源加载接口
AbstractApplicationContext:提供ApplicationContext的基本实现,最主要定义了refresh方法,也就是刷新流程定义,让子类重写钩子即可完成拓展,非常的灵活
AbstractRefreshableApplicationContext:提供了refreshBeanFactory()抽象方法的实现,使用DefaultListableBeanFactory为默认的BeanFactory,提供
loadBeanDefinitions抽象方法,让子类专注于通过各种方式加载BeanDefinition
AbstractXmlApplicationContext和ClassPathXmlApplicationContext:loadBeanDefinitions实现从classpath路径下载入xml解析BeanDefinition方式
AnnotationConfigWebApplicationContext:目前使用较多的容器对象,loadBeanDefinitions实现为扫描注解加载BeanDefinition

AOP 使用场景

能够实现方法拦截器和切入点完全分离的代码。

1. Authentication 权限认证
2. Logging 日志
3. Transaction 事务
4. Lazy Loading 懒加载
5. Context Process 上下文处理
6. Error Handler 错误跟踪
7. Cache 缓存
消息模块
数据访问

HandlerInterceptor 实现主题与多语言监听器

Spring AOP实现原理

AOP为Aspect Oriented Programming面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

Web

Springmvc框架包含其中Web开发框架,两外还包括了spring5新增的支持响应式编程的Web开发框架

Test

组合Junit或TestNG来实现单元测试和集成测试等功能

这里的一个点需要注意:
spring实例化bean的三种方式
①构造器进行实例化
上面的这种即是构造器实例化
②静态方式实例化
xml文件配置方法

Spring中的设计模式-适配器模式

Spring中的设计模式-适配器模式
https://blog.csdn.net/adoocoke/article/details/8286902

Spring中也有适配器模式的典型应用。
在Spring的Aop中,使用的Advice(通知)来增强被代理类的功能。Spring实现AOP功能的原理就使用代理模式(1、JDK动态代理。2、CGLib字节码生成技术代理。)对类进行方法级别的切面增强,即生成被代理类的代理类,并在代理类的方法前,设置拦截器,通过执行拦截器重的内容增强了代理方法的功能,实现的面向切面编程。

Advice(通知)的类型有:BeforeAdvice、AfterReturningAdvice、ThreowSadvice的。
在每个类型Advice(通知)都有对应的拦截器,MethodBeforeAdviceInterceptor、AfterReturningAdviceInterceptor、ThrowsAdviceInterceptor。

Spring需要将每个Advice(通知)都封装成对应的拦截器类型,返回给容器,所以需要使用适配器模式对Advice进行转换。

MST

描述一下Bean的生命周期

在这里插入图片描述

Spring 的 AOP 底层代码是如何实现的?
循环引用问题,以及Spring中使用到的设计模式
Spring的事务是如何回滚的?
Spring是如何解决循环依赖的问题的?
Spring IOC的原理以及底层实现?
Bean Factory与FactoryBean 的区别?@Bean这个注解是如何实现Bean的注入的?

BeanFactory 是Spring IoC容器的基本功能规范,是IoC容器所应遵守的最底层和最基本的编程规范。

谈一下Spring 事务传播

.

Spring事务会失效的几种情况

1.Bean没有纳入Spring容器管理;
2.自调用,即调用当前类的方法,比如用this调用当前类的方法;
3.异常没有抛出,被try catch了;
4.抛出的不是RuntimeException 且没有指定rollbackFor=异常类型;
5.事务方法不是public的;
6.事务方法内启动新线程进行异步操作;
7.数据库不支持事务。

理解 Spring ApplicationListener 和 CommandLineRunner

https://blog.csdn.net/qq_38962655/article/details/112985006

MST 2

1、spring中bean的生命周期
2、spring创建bean的流程
3、什么是spring的循环依赖问题
4、spring循环依赖问题如何解决
5、为什么spring使用三级缓存解决循环依赖问题
6、spring循环依赖源码解析
7、修改spring源码尝试二级缓存是否解决循环依赖问题

MST 3

为什么要使用Spring,Spring的优缺点有哪些
Spring的IOC容器初始化流程
Spring的IOC容器实现原理,为什么可以通过byName和ByType找到Bean
Spring注解Resource和Autowired区别对比详解
Spring中Qualifier用处,处理注入不准确的问题

3.处理器方法的参数请求
①处理器方法参数(即方法里面的参数)
可以进行注入的数据有

HttpServletRequest对象。
HttpServletResponse对象。
HttpSession对象。(注意:ServletContext不会注入。)
简单数据类型。作用:获取客户端提交的单值参数。

参考资料

Spring 的 BeanFactory 和 FactoryBean
https://mp.weixin.qq.com/s/pS96RmLll4XeKLyHHbd05Q

spring官方文档的解读
https://blog.csdn.net/li1376417539/article/details/104951358/

Spring-Context
https://www.jianshu.com/p/e1a4d38be670

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java Spring是一个广泛使用的轻量级开源框架,用于构建企业级Web应用程序。Spring框架提供了模块化的解决方案,简化了企业级应用的开发、管理以及依赖注入(Dependency Injection,DI)等功能。以下是一些Spring基础知识点的整理: 1. **IoC(Inversion of Control)和DI(Dependency Injection)**:Spring的核心思想就是IoC,它反转了传统的控制流动,使对象之间通过容器管理彼此的依赖关系,而不是硬编码。DI是IoC的一种具体实现方式,通过配置文件或注解自动为对象提供所需依赖。 2. **Bean的作用域和生命周期**:Spring中的Bean有多种作用域,如Singleton(单例)、Prototype(原型)、Request、Session等。每个Bean都有其生命周期,从创建、初始化到使用和销毁。 3. **Spring配置文件**:通常使用XML配置文件(如applicationContext.xml)或Java配置(@Configuration classes)来定义Spring应用的组件和依赖关系。 4. **AOP(Aspect Oriented Programming)**:Spring AOP支持面向切面编程,可以编写跨组件的行为,比如日志记录、事务管理等。 5. **Spring MVC**:Spring提供的web MVC架构,包括Controller处理HTTP请求,Model负责数据访问和业务逻辑,View负责渲染结果给用户。 6. **Spring Boot**:Spring Boot简化了Spring应用的初始搭建,自动配置了许多常用的功能,使得快速开发变得更容易。 7. **Spring Data**:提供了一套高级API,用于简化数据访问操作,如JPA、MongoDB等。 8. **Spring Security**:用于实现Web应用的安全管理,包括认证、授权、会话管理等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值