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

spring学习笔记

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

spring学习笔记

学习框架,要
1)、知道框架能做什么
2)、框架的语法,框架要完成一个功能,需要一定的步骤支持。
3)、框架的内部实现,框架的内部怎么做,原理是什么。
4)、通过学习,实现一个框架。

一、spring第一个核心功能: ioc (控制反转)
ioc: 控制反转,是一个理论,一个概念,一个思想,描述的是把对象的创建、赋值、管理工作都交给代码之外的容器实现,也就是说对象的创建是有其他外部资源完成。
控制:创建对象、对象的属性赋值、对象之间的关系管理

反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器,由容器代替开发人员管理对象,创建对象,给属性赋值。

正转:由开发人员在代码中,使用new方法创建对象,开发人员主动管理对象。

容器:是一个服务器软件,一个框架(spring)
使用ioc的目的:减少对代码的改动,也能实现不同的功能,实现解耦合。
java中创建对象方式:
1、构造方法:new Student()
2、反射
3、序列化
4、克隆
5、ioc:容器创建对象。
6、动态代理

spring是一个容器,管理对象,给属性赋值,底层是反射创建对象。

di实现语法有两种:
1、在spring的配置文件中,使用标签和属性完成,叫做基于XML的di实现
2、使用spring中的注解,完成属性赋值,叫做基于注解的id实现。
di的语法分类:
1、set注入(设值注入):spring调用类的set方法,在set方法可以实现属性的赋值。
使用广泛。
2、构造注入:spring调用类的有参数构造方法,创建对象,在构造方法中完成赋值。

junit:单元测试,一个工具类库,做测试方法使用的。
单元:指定的是方法,一个类中有很多方法,一个方法称为单元。
使用单元测试:
1、需要加入junit依赖
2、创建测试类,src/test/java下创建。
3、创建测试方法

1)public方法
2)没有返回值
3)名:test+方法名
4)方法没有参数
5)方法的上面加入@Test,表示这样的方法是单独执行的,不用main方法。

多个配置文件的优势:
1、每个文件的大小比一个文件要小很多,效率高。
2、避免多人竞争带来冲突。
如果项目有多个模块(相关功能在一起),一个模块一个配置文件。
多文件的分配方式:
1、按功能模块,一个模块一个配置文件。
2、按类的功能,数据库相关的配置一个文件配置文件,做事务的功能一个配置文件,做servlet功能的一个配置文件等。

二、注解
基于注解的di,通过注解完成java对象创建,属性赋值。
使用注解的步骤:
1、加入maven的依赖,spring-context,在你加入spring-context的同时,间接加入spring-aop的依赖。
使用注解必须使用spring-aop依赖
2、在类中加入spring的注解(多个不同功能的注解)
3、在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你的项目中的位置
学习的注解:
1、@component
2、@respotory
3、@service
4、@controller
5、@Value
6、@Autowired

三、aop(面向切面编程)

1、动态代理
实现方式:JDK动态代理,使用jdk中的proxy,method,等创建代理对象。
jdk动态代理要求目标类必须实现接口
cglib动态代理:第三方的工具库,创建代理对象,原理是继承,通过继承目标类,创建子类。子类就是代理对象,要求目标类不能是final的,方法也不能是final的。
2、动态代理的作用
1)在目标类源码不改变的情况下,增加功能
2)减少代码的重复
3)让程序员专注业务逻辑代码
4)解耦合,让业务功能和非业务功能分离。
3、aop:面向切面编程,基于动态代理的,可以使用jdk,cglib两种代理方式。
aop就是动态代理的规范化,把动态代理的实现步骤,方式都定好了,让开发人员用一种统一的方式,运用动态代理。
4、aop
aspect:切面,给你的目标类增加额外的功能,就是切面。切面的特点:一般都是非业务方法,独立使用的。
orient:面向。
programing:编程。
oop:面向对象编程。
怎么理解面向切面编程?
1)需要在分析项目功能时,找出切面。
2)合理的安排切面的执行时间(在目标方法前,还是目标方法后)
3)合理的安排切面执行的位置,在哪个类,哪个方法增加增强功能
术语:
1)aspect:切面,给你的目标类增加额外的功能,就是切面。切面的特点:一般都是非业务方法,独立使用的。
就是一堆代码,完成某一个功能。
常见的切面功能有:日志、事务、统计信息、权限验证。
2)joinpoint:连接点,连接业务方法和切面的位置。就某类中的业务方法
3)pointcut:切入点,指多个连接点方法的集合,多个方法
4)目标对象:给哪个类的方法增加功能,这个类就是目标对象
5)advice:通知,通知表示切面功能执行的时间
说一个切面,有三个关键的要素
1)切面的功能代码,切面要干什么
2)切面的执行位置,使用pointcut表示切面执行的位置
3)切面执行时间,使用advice表示时间。
5、aop的实现
aop的技术实现框架:
1、spring:在内部实现了aop规范,能做aop的工作。spring主要在事务处理时使用aop,我们项目开发中很少使用spring的aop实现,因为比较笨重。
2、aspectJ:一个开源的专门做aop的框架。
spring中继承了aspectJ框架,通过spring就能使用aspectJ功能。
6、学习aspectJ框架的使用:
1)切面的执行时间,这个执行时间在规范中,叫做advice(通知,增强)
在aspectJ中使用注解表示,也可以用XML配置文件中的标签。
@Before,@AfterReturning,@Around,@AfterThrowing,@After
2)表示切面执行的位置,使用的是切入点表达式。

目标类没有接口,就是使用的cglib动态代理。spring会自动应用cglib。
有接口,也可能是cglib动态代理。但是默认是jdk动态代理。

四、事务处理
1、什么是事务
事务是指一组sql语句的集合,集合中有多条sql语句。
我们希望多个sql语句都能成功,这些sql语句的执行是一致的,作为一个整体执行。

2、在什么时候要使用事务
当我的操作涉及到多个表,或者是多个语句的insert,update,delete,需要保证这些语句都是成功才能完成我的功能,或者都失败,保证操作是符合要求的。
在java的代码中,写程序来控制事务,此时事务应该放在那里呢?
service类的业务方法中,
因为业务方法会调用多个dao方法,执行多个sql语句
3、通常使用JDBC访问数据库,还是mybatis访问数据库,怎么处理事务
jdbc访问数据库,处理事务:connection conn; conn.commit();conn.rollback();
mybatis:SqlSession.commit(; SqlSession.rollback();

4、3中问题的事务的处理方法,有什么不足
1)不同的数据库访问技术,处理事务的对象,方法不同。需要了解不同数据库访问技术使用事务的原理。
2)要掌握多种数据库中事务的处理逻辑,什么时候提交事务,什么时候回顾事务。
3)处理事务的多种方法。
总结:多种事务的访问技术,有不同的事务处理的机制,对象,方法。

5、怎么解决不足
spring提供一种处理事务的统一模型,能使用统一步骤,方式完成多种不同数据库访问技术的事务处理。
使用spring的事务处理机制,可以完成mybatis等多种方式访问数据库的事务处理。

6、处理事务,需要怎么做,做什么
spring处理事务的模型,使用的步骤是固定的,把事务使用的信息提供给spring就可以了。
1)事务内部提交,回滚事务,使用的事务管理器对象,代替你完成commit,rollback
事务管理器是一个接口和他的众多实现类。
怎么使用:需要告诉spring你用的是那种数据库访问技术。

2)你的业务方法需要什么样的事务,说明需要事务的类型。
说明方法需要的事务:
1)事务的隔离级别:有四个值。
2)事务的超时时间,表示一个方法最长的执行时间,如果方法执行时超过了时间,事务就回滚,单位是秒,整数值,默认是-1.
3)事务的传播行为,控制业务方法是不是有事务的,是什么样的事务的。
7个传播行为,表示你的业务方法调用时,事务在方法之间是怎样使用的。

3)事务提交事务,回滚事务的时机
1)当你的业务方法,执行成功,没有异常抛出,当方法执行完毕,spring在方法执行后提交事务。
2)当你的业务方法抛出运行异常,spring执行回滚,调用事务管理器的rollback
运行时异常的定义:RuntimeException ,和它的子类都是运行时异常。
3)当你的业务方法抛出非运行时异常,主要是受查异常时,提交事务。

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

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

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