Spring5

Ioc:控制反转,将创建对象和对象之间的调用过程交给spring进行管理

Aop:面向切面,不修改代码,对功能进行增强

IOC

底层原理

(1)xml解析,工厂模式,反射

        通过xml解析,获取类路径,再通过反射加载类,创建对象 

 接口

1.ioc思想是基于ioc容器,ioc容器底层是对象工厂

2.Spring提供ioc容器实现方式:

①BeanFactory

Ioc容器基本实现,spring内部接口,加载配置文件时,不会创建对象,获取对象使用时,才会创建对象。

②ApplicationContext

BeanFactory的子接口,提供更多强大的功能,一般开发用,加载配置文件时,会创建对象。

ClassPathXmlApplicationContext:src路径下的配置文件

FileSystemXmlApplicationContext:系统盘的路径下的配置文件

IOC操作Bean管理

内容

(1)Spring创建对象

(2)Spring注入属性

方式

一、基于xml配置文件实现

  • 创建对象

        ①使用Bean标签,标签添加对应属性

        ②id属性:唯一标识 (类似名字)class属性:类全路径

        ③创建对象时,默认执行无参构造

  • 注入属性

        ①DI:依赖注入,即注入属性

        a. 使用set方法

                α.properties标签

                                name类属性名,(.xxx 需要有get方法,可实现级联赋值)

                                value向属性注入的参数

                                ref向属性注入外部bean(可实现级联赋值)

                                <bean>向属性注入内部bean                               

                β.使用p名称空间注入

                        添加p名称在配置文件中

                        bean标签 p:xxx (属性名)= ""(参数)

        b.使用有参构造 

                constructor-arg标签  name类属性名(index属性名下标),value向属性注入的参数

        c.注入数组,list,map,set类型(①集合中设置对象 ②提取集合提取util并注入)                  

*当设值为null <properties><null/>

*当设值为带特殊符号<value><![CDATA[]]>

spring有两种bean

  1. 普通bean:在配置文件中定义类型与返回类型一致
  2. 工厂bean(FatoryBean):在配置文件中定义类型与返回类型可以不一致

bean的作用域:spring中bean默认时单实例对象

        在配置文件可设置scope:

                singleton(默认值,单例):加载配置文件就会创建单实例对象

                prototype(多例):获取对象使用getBean时,才会创建多实例对象

bean生命周期

(生命周期:从对象创建到对象销毁的过程)

 若有bean后置处理器:加上红色两步

(1)通过构造器创建bean实例(无参构造)

(2)为bean的属性设置值和对其他bean引用(调用set方法)

(3)把bean实例传递到bean后置处理器的方法postProcessBeforeInitialization

(4)调用bean的初始化方法(需要进行配置初始化的方法)

(5)把bean实例传递到bean后置处理器的方法postProcessAfterInitialization

(6)bean可以使用了(对象获取到了)

(7)当容器关闭时候,调用bean的销毁的方法(需要进行配置销毁的方法)

xml自动装配autowire

(1)根据属性进行自动装配byName

(2)根据类型进行自动装配byType

外部属性注入

 引入context名称空间,context:property-placeholder  location="class:"加载properties文件

value="${(properties文件的key)}"

二、基于注解方式实现

 注解:@名称(属性名=属性值),作用于类,方法,属性,简化xml配置

xml加注解

1.创建对象

(1)类上加注解

        @Component

        @Service

        @Controller

        @Repository

        四个功能都一样,都是创建bean实例

(2)xml配置context,context:component-scan ,添加要扫描的类包,可自定义只扫描哪些注解,或者哪些注解不扫描

2.属性注入

(1)@Autowired:根据属性类型进行自动装配

(2)@Qualifier:和Autowired一起可实现根据属性名称进行注入

(3)@Resource:可以根据类型注入,可以根据名称注入 

(4)@value:注入普通类型属性 

完全注解开发

1.用配置类替代xml

        @Configuration

        @ComponentScan(basePackages = {"com.mg.spring5.annotate"})

2.启动类需要 new AnnotationConfigApplicationContext(xxxxx.class)

AOP

  定义:面向切面编程,利用AOP可以对业务逻辑各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可复用性,同时提高了开发效率。即,不通过修改源代码,在主干功能里添加新功能。

底层原理

动态代理

(1)有接口情况,使用JDK动态代理(创建接口实现类代理对象,增强类的方法)

①使用proxy类里面的方法创建代理对象

调用newProxyInstance方法

三个参数:

        a.类加载器

        b. 增强方法所在的类,这个类实现的接口,支持多个接口

        c. 实现这个接口InvocationHandler,创建代理对象,写增强的方法

(2)没有接口情况,使用CGLIB(创建子类的代理对象,增强类的方法)

aop术语

        1.连接点(类中可以被增强的方法)

        2.切入点(实际被真正增强的方法)

        3.通知(增强)(实际增强的逻辑部分)

                        类型:前置,后置,环绕,异常,最终

        4.切面(一个动作:把通知应用到切入点的过程)

AOP操作

spring框架是基于AspectJ实现AOP操作。

AspectJ是独立的AOP框架,和spring结合使用实现AOP操作。

实现方式:

(1)xml配置文件

(2)注解

切入点表达式:

execution ( [ 权限修饰符 ] [ 返回类型(可不写) ] [ 类的全路径 ] [ 方法名称 ] [ 参数列表 ] )

execution(* com.mg.spring5.aopExample.Dao.*.*(..))  【* == 所有】 

抽取相同切入点:

@PrintCut ,用方法代替切入点表达式

多个增强类设置优先级:

@Order() int类型数值,数值越小,优先级越大

 JDBCTemplate

spring框架对Jdbc进行封装,使用JdbcTemplate实现对数据库操作

(1)xml配置文件配置数据库连接池 

(2)xml配置JdbcTemplate对象,注入dataSource

(3)创建Dao和Service,注入JdbcTemplate对象

        dao注入jdbcTemplate,service注入dao

(4)创建数据库对应实体类entity

(5)创建Dao和Service

        service调用dao方法

        在dao写方法对数据库进行操作,调用JdbcTemplate对象的update方法实现操作(sql,args)

事务管理

事务添加到service业务逻辑层

1. 编程式事务:try-catch回滚

2. 声明式事务:底层使用AOP原理

        (1)注解+xml方式

                xml配置创建事务管理器

                开启事务注解扫描

                在需要事务的类或者方法上加注解@Transactional

                注解参数配置

                        ①事务传播行为 7种

                        ②事务隔离级别

                        ③超时时间:未在规定时间提交事务--回滚,默认值-1,即不开启

                        ④只读:是否只可查询,默认值为false

                        ⑤回滚:设置哪些异常进行回滚

                        ⑥不回滚:设置哪些异常不进行回滚

        (2)xml

                创建事务管理器

                配置通知

                配置aop切入点和切面

        (3)完全注解

Spring5新特性/功能

日志

Spring5自带通用的日志封装;移除了Log4jConfigListener,使用Log4j2

引入xml 或者 自定义log类

调整级别:日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL

支持@Nullable注解

用于方法参数里:方法参数可为空

用于方法上:方法返回值可以为空

用于属性上:属性值可为空

函数式风格创建对象

交给spring管理

支持整合Junit5

单元测试Juit4

单元测试Juit5

双注解:

 复合注解:

 SpringWebFlux

        Spring5添加的新模块,用于web开发的,与SpringMVC功能类似,WebFlux使用当前一种比较流行响应式编程出现的异步非阻塞框架,基于Reactor的相关API实现。

特点:(1)非阻塞式:在有限资源下, 提高系统吞吐量和伸缩性,以Reactor为基础实现响应式编程(2)函数式编程:实现路由请求;

与SpringMVC区别:

        (1)两个框架都可以采用注解方式,都运行在Tomcat中

        (2)SpringMVC采用命令式编程,WebFlux采用异步响应式编程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值