8.1spring进阶
spring常用注解
1.@Component
它是这些注解里面最普通的一个注解,一般用于把普通pojo实例化到spring容器中。
@Controller和@Service和@Repository是它的特殊情况,当一个类不需要进行这几种特殊归类的时候,只是作为一个普通的类,被Spring管理就OK的时候,比较适合采用@Component注解。
原理:将普通JavaBean实例化到spring容器中,Spring容器统一管理,用起来不用自己new了,相当于配置文件中的< bean id=“” class=“”/>
2.@Controller 属于SpringMvc
用于标注控制层,表示向控制层注入服务层的数据
3.@Service
用于标注服务层,来进行业务的逻辑处理,在服务层注入DAO层数据
4.@Repository
用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
5.@ComponentScan
(这个注解长得和@Component有点像,但是他们是完全两个不同类型的注解,@Component像一个标签,标志着你这类是个啥,而@ComponentScan像一个路标,告诉你去哪找东西)
应用场景:在定义spring中的bean的时候,一般有两步
1.在bean上面添加@Controller/@Service/@Repository/@Component这几个注解,标注这个类是个bean
2.然后还需要让Spring能够找到这个bean,这时候就需要使用到@ComponentScan这个注解了
使用:@ComponentScan(“com.demo”) 引号里面是要扫描的包路径
SpringBoot中的使用:
在SpringBoot中也许不会经常看到这个注解,因为@SpringBootApplication这个注解里面集成了@ComponentScan注解,它里面会自动扫描这个类所在包以及子包下面的bean。
所以如果我们要找的bean不在它的所在包或者子包里面,就需要自己再添加一个@ComponentScan注解。例如:
@ComponentScan({“com.demo.springboot”,”com.demo.somethingelse”})
6.@ResponseBody
加了这个注解的类会将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。
9.@AutoWired
这个注解的英文直译是“自动装配”,“自动注入”
它就像一根水管一样,两端接上水桶,然后就可以把一个桶里面的水自动注入到另一个桶中。
这两端的桶,可以是 类成员变量/方法/构造函数
中间流的水,可以是 数组/集合/Map/父类属性
Spring中常用注解及其作用_spring注解及其作用-CSDN博客Spring中常用注解及其作用1.@Component它是这些注解里面最普通的一个注解,一般用于把普通pojo实例化到spring容器中。@Controller和@Service和@Repository是它的特殊情况,当一个类不需要进行这几种特殊归类的时候,只是作为一个普通的类,被Spring管理就OK的时候,比较适合采用@Component注解。原理:将普通JavaBean实例化到spring容器中,Spring容器统一管理,用起来不用自己new了,相当于配置文件中的< bean id=""_spring注解及其作用https://blog.csdn.net/m0_48038376/article/details/108343497
springMvc常用注解
一.@Controller:
二.@RequestMapping:
(1)GetMapping
(2)PostMapping
三.@RequestParam:
四.@PathVariable:
五.@ModelAttribute:
六.@ResponseBody:
七.@ResponseStatus:
八.@SessionAttributes:
九.@InitBinder:
十.@ExceptionHandler:
SpringMVC常用注解_暮雨倦柳的博客-CSDN博客本篇文章主要介绍了一些常用注解。_springmvc常用注解https://blog.csdn.net/NameBy/article/details/131449837
springBoot常用注解
启动类注解
在springboot中,经常会用到一些注解,它们各自代表着什么呢?在这个属于我们的节日里,快来了解一下吧!
1、@SpringBootApplication
一般不会主动去使用它,但是要知道它是一个组合注解,@Configuration 、@EnableAutoConfiguration 、@ComponentScan 注解的集合。
2、@Configuration
这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。用@Configuration注释类表明是一个配置类,允许在 Spring 上下文中注册额外的 bean 或导入其他配置类。
3、@EnableAutoConfiguration
该注解就是用来开启自动配置的,一般情况下也是需要去配置的,后续会更新。
4、@ComponentScan
@ComponentScan用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类自动装配到bean容器里。会被自动装配的注解包括@Controller、 @Service、@Component、@Repository等等。其作用等同于<context:component-scan base-package="com.xxx.xxx" />配置。这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。
这几个注解一般会在启动类里边配置,如下图。
5、@Autowired、@Qualifier
@Autowired注解作用在构造函数、方法、方法参数、类字段以及注解上
@Autowired注解可以实现Bean的自动注入
当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。
springboot常用注解详解_spring boot注解-CSDN博客本文讲了springboot中常用的注解。_spring boot注解https://blog.csdn.net/m0_64818669/article/details/127491630
springCloud常用注解及组件
SPRINGCLOUD五大组件及相关注解整理_springcloud 各组件注解-CSDN博客三、Hystrix与Feign的结合使用a.使用中的一些常用注解前面几篇文章主要是单个介绍某些组件在Springcloud中的使用,下面我们来使用feign与Hystrix组合的方式来完成微服务之间的调用以及服务出现问题时的熔断降级!1)eureka服务注解@SpringBootApplication@EnableEurekaServer2)服务提供端注解@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClient3)_springcloud 各组件注解https://blog.csdn.net/ZZJST/article/details/107342642
参考
Spring系列之Spring(Boot/Cloud)常用注解(最全面)_springcloud注解大全_johnny233的博客-CSDN博客Spring:主要有Spring Bean与Spring Web MVC,及其他等3类注解。Spring Boot:Spring Cloud:_springcloud注解大全https://blog.csdn.net/lonelymanontheway/article/details/119855296
spring,springMvc,springBoot,SpringCloud
一、概念
1、Spring 不提供表现层支持
Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),是一个分层的轻量级开源框架。
2、SpringMVC 需要web服务器例如tomcat 提供表现层支持
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架,用于替代servlet(处理请求,获取表单参数,表单校验等),SpringMVC是一个MVC的开源框架,springMVC相当于Struts2 + Spring。
3、SpringBoot 内置服务器tomcat 更专注于开发微服务后台接口
Springboot是一个微服务框架,延续了spring框架的核心思想IOC和AOP,Spring Boot简化了Spring应用的创建、运行、调试、部署等,使用开发者可以专注于Spring应用的开发,而无需过多关注XML的配置。
Spring、SpringMVC和SpringBoot的关系_spring springboot springmvc的关系-CSDN博客一、概念1、Spring Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。 2、SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。SpringMVC是一种web层mvc框架,用于替代servlet(处理|响应请求,获取表单参数,表单校_spring springboot springmvc的关系https://blog.csdn.net/qq_47183158/article/details/123066684
spring和springMvc:
- spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;
- springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;
springMvc和springBoot:
- springMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;
- springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,大大简化了配置流程;
- spring boot使用了默认大于配置的理念,集成了快速开发的spring多个插件,同时自动过滤不需要配置的多余的插件,简化了项目的开发配置流程,一定程度上取消xml配置,是一套快速配置开发的脚手架,能快速开发单个微服务;
也叫约定大于配置 - spring cloud大部分的功能插件都是基于springBoot去实现的,springCloud关注于全局的微服务整合和管理,将多个springBoot单体微服务进行整合以及管理; springCloud依赖于springBoot开发,而springBoot可以独立开发;
总结: - Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注入的容器, aop解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;
- springMvc是基于Servlet 的一个MVC框架主要解决WEB开发的问题,因为Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐;
- 为了简化开发者的使用,从而创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;
但区别于springMvc的是,springBoot专注于微服务方面的接口开发,和前端解耦,虽然springBoot也可以做成springMvc前后台一起开发,但是这就有点不符合springBoot框架的初衷了; - 对于springCloud框架来说,它和springBoot一样,注重的是微服务的开发,但是springCloud更关注的是全局微服务的整合和管理,相当于管理多个springBoot框架的单体微服务
8.1.1进阶
*spring 事务实现方式有哪些?
声明式事务:声明式事务也有两种实现方式,基于 xml 配置文件的方式和注解方式(在类上添加 @Transaction 注解)。 编码方式:提供编码的形式管理和维护事务。
*说一下 spring mvc 运行流程?
spring mvc 先将请求发送给 DispatcherServlet。 DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller。 DispatcherServlet 再把请求提交到对应的 Controller。 Controller 进行业务逻辑处理后,会返回一个ModelAndView。 Dispathcher 查询一个或多个 ViewResolver 视图解析器,找到 ModelAndView 对象指定的视图对象。 视图对象负责渲染返回给客户端。
*spring mvc 有哪些组件?
前置控制器 DispatcherServlet。 映射控制器 HandlerMapping。 处理器 Controller。 模型和视图 ModelAndView。 视图解析器 ViewResolver。
*@RequestMapping 的作用是什么,有哪些属性?
将 http 请求映射到相应的类/方法上。 RequestMapping接口的源码如下,里面定义了八个属性(Spring4.3.8)。 注:SpringMVC在4.1版本对RequestMapping属性做了相应调整,去掉了path属性。
*@Autowired 的作用是什么?
@Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired 的使用来消除 set/get 方法。
#spring 支持几种 bean 的作用域?
spring 支持 5 种作用域,如下: singleton:spring ioc 容器中只存在一个 bean 实例,bean 以单例模式存在,是系统默认值; prototype:每次从容器调用 bean 时都会创建一个新的示例,既每次 getBean()相当于执行 new Bean()操作; Web 环境下的作用域: request:每次 http 请求都会创建一个 bean; session:同一个 http session 共享一个 bean 实例; global-session:用于 portlet 容器,因为每个 portlet 有单独的 session,globalsession 提供一个全局性的 http session。 注意: 使用 prototype 作用域需要慎重的思考,因为频繁创建和销毁 bean 会带来很大的性能开销。
*spring 自动装配 bean 有哪些方式?
no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。 byName:它根据 bean 的名称注入对象依赖项。 byType:它根据类型注入对象依赖项。 构造函数:通过构造函数来注入依赖项,需要设置大量的参数。 autodetect:容器首先通过构造函数使用 autowire 装配,如果不能,则通过 byType 自动装配。
spring 中的 bean 是线程安全的吗?
spring 中的 bean 默认是单例模式,spring 框架并没有对单例 bean 进行多线程的封装处理。实际上大部分时候 spring bean 无状态的(比如 dao 类),所有某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model 对象),那就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了,所以就可以保证线程安全了。 有状态就是有数据存储功能。 无状态就是不会保存数据。
*说一下 spring 的事务隔离?五大 对比mysql的acid
spring 有五大隔离级别,默认值为 ISOLATION_DEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致: spring 有五大隔离级别 isolation_default:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么; isolationreadumconmmitted:未提交读,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读); isolationreadconmmitted:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读),SQL server 的默认级别; isolationrepeatableead:可重复读,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读),MySQL 的默认级别; ISOLATION_SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。MySQL隔离级别 可能出现的事务问题 脏读 :表示一个事务能够读取另一个事务中还未提交的数据。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。 不可重复读 :是指在一个事务内,多次读同一数据。 幻读 :指同一个事务内多次查询返回的结果集不一样。比如同一个事务 A 第一次查询时候有 n 条记录,但是第二次同等条件下查询却有 n+1 条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。