Java-Spring学习笔记

-------------------------------------

SpringFrameWork

一、技术体系结果

单一架构:

分布式架构:

单一架构框架:Spring、SpringMVC、MyBatis

分布式架构:SpringBoot、SpringCloud、中间件

框架=jar包+配置文件

二、SpringFrameWork介绍

主要功能:依赖注入(DI)、面向切面编程(AOP)、声明式事务管理(TX)

三、springIoC容器和核心概念

SpringIoC容器,负责实例化,配置和组装Bean。

配置元数据以XML、Java注解、Java代码形式表现。

spring容器接口的实现类:

spring IoC容器的核心功能:IoC、DI

IoC控制反转:创建对象不是由程序员创建,而是由IoC容器创建。

DI依赖注入:将依赖关系在容器内部进行处理,实现对象的解耦合。

四、SpringIoC实践和应用

Spring IoC/DI实现步骤:

1.编写配置文件:描述组件类信息、组件之间的引用关系

2.实例化IoC容器对象,要指定配置信息

3.如何在java代码中获取组件,使用组件

        

XML配置:

Bean的信息声明配置

无参构造如何配置:

用<bean>标签,两个属性:id组建的唯一标识、class组件类的权限定符

静态工厂如何配置:

非静态实例工厂如何配置:

总结:

Bean依赖注入配置

主要注入方式:基于构造函数的注入、基于setter的依赖注入

<constructor-arg  构造参数传值的DI配置

单构造参数注入:

多个构造参数注入:【赋值  直接属性用value,引用用ref】

按照参数顺序赋值

通过名字找参数,可以不用按照顺序。

第三种方式,通过参数的下角标指定填写。

setter方法注入:

IoC容器创建和使用

IoC容器获取Bean的三种方式

第三种方式,如果有多个同类型的bean,会报不唯一错误。

组件Bean的作用域和周期方法配置

周期方法:到了对应的时间节点就会主动被调用的方法。只有等待和编写对应的业务逻辑即可。

init方法,destroy方法。 

下图,设置init和destroy方法。

destroy方法,要释放IoC容器才能调用。

作用域:Bean作用域由scope属性决定。

FactoryBean的特性和使用

提供一个getobject()方法,可以在里面写自己的实例化逻辑。

想用javaBean的factoryBean,就写一个JavaBeanFactoryBean的类。

配置文件:

基于XML整合三层架构组件

把数据库交给IoC管理

下面是一个实例:

dao层

service层

controller层

xml文件配置【注意看下面的注释,配的是什么】

测试模块:

xml方式配置的问题:【XML方式基本被淘汰了】

        1.注入的属性必须添加setter方法,代码结构乱     

        2.配置文件和java代码分离,编写不方便。

        3.XML配置文件解析效率低。

注解配置:

Bean注解标记和扫描(IoC)

上面这些注解功能没有任何区别,都是将java类变成springbean。只是用名字对所用地方做个区分。

进行IoC的配置分两步:第一步:标记注解@component;第二步:配置指定的包

下图为测试的代码: 【注意Bean的默认名id是首字母小写】

排除某些包下的注解:<exclude-filter>标签

指定某些包,只扫描指定的【注意后面的user-default设成false】

组件Bean作用域和周期方法注解

周期方法注解:

        构造函数@PostConstruct

        析构函数@PreDestroy

作用域:【用@scope标注】

Bean属性赋值:引用类型自动装配DI

@Autowired标注属性,直接做DI,不用setter方法了。

@resource=@autowired+@qualifier

Bean属性赋值:基本类型属性赋值DI

一般直接赋值即可,@value注解主要用于读取外部文件。

基于注解+XML方式的三层架构组件

IoC注解:@Component、@Controller、@Service、@Repository

DI注解:

        其他的Bean:@autowired 自动装配、@Qualifier、@Resource

        基本类型:直接赋值,@value主要引外部配置文件

配置类配置:

配置类和完全注解开发介绍

替代XML方式

创建一个配置类

这次 IoC容器需要根据配置类来声明。两种创建IoC容器方式

下图为测试类:

@Bean注解的使用

第三方使用方式,有一个第三方就声明一个方法:

下图:引用其他ioc组件,直接调用对方的bean方法。

@Import注解的使用

相当于一种汇总机制。多个配置类,用@import,可以把其他配置类整合到第一个配置类中,这样只需要加载一个配置类即可。

配置类案例

配置类的作用是替代XML;替代扫描标签,替代外部配置标签,替代第三方bean标签

注解:

        如何合适呢个名一个配置类?创建一个类,加个@configuration

        如何扫描包注解?@componentscan

        如何引用外部配置?@propertysorce        

        如何声明bean?@Bean

使用配置类,对应的IoC容器也变了,classpathxml..变成Annotationconfig...

        

三种配置方法总结:

纯XML方式:

XML+注解方式:

完全注解方式:

整合spring5-test5搭建测试环境

五、Spring AOP面向切面编程

场景设定和问题复现

比如计算器的加减乘除,每个都要求打印输入和结果输出,每个都要,要重复四次,冗余且不方便维护。

动态插入如何实现?

解决技术代理模式

如何实现动态插入?代理模式,把非核心业务剥离出来,交给代理。

代理技术:静态代理【自己每个目标都要创建一个代理类】,动态代理【不用自己创建,运行过程中自己查找】

静态代理:知道有,基本不用

代理类:非核心业务,调用目标类的方法

目标类:只有核心业务

使用:

动态代理:

有接口用JDK,没有接口用cglib

面向切面编程思维AOP

AOP是一种横向编程思维,将代码中的重复的非核心业务提取到一个公共的模块。最终在利用动态代理技术横向插入到各个方法中。【解决非核心代码冗余问题】

AOP框架介绍和关系梳理

核心关注点:核心代码

横切关注点:非核心代码,日志异常等

增强(通知):提取的代码

连接点:哪些方法能被切,被插入代码

织入:切入的动作

SpringAOP基于注解方式实现和细节

在spring中开启支持aspectj:在配置文件中加一行编辑、@enableaspectjautoproxy注解

【配置类一定要扫描增强类@componentscan,不然不起效果】

如何配置增强类:@Aspect

获取通知细节信息

 

切面表达式语法:

统一切点管理:

切点表达式

最好单独开一个类,在那个类中定义所有的切点表达式

环绕通知:

一个环绕通知可以代替三个,但函数内部需要自己去定义执行。异常也要求抛出去

切面增强优先级的问题:

CGLib的生效场景:【不管有没有实现接口,spring都会生成对象,只不过选择的技术不同】

实现接口用的是jdk

把接口删了,就单独一个类,就用cglib了

注解方式总结:

SpringAOP基于XML方式实现准备工作

加载配置文件:

SpringAOP对获取Bean的影响理解

IoC容器有多个Bean,报不唯一的错误,根据id值指定获取Bean即可。

六、Spring声明式服务

声明式事务概念

基于注解的声明式事务

事务注解添加:@Transactional,

导入AOP注解支持:@EnableAspectJAutoProxy

开启事务注解支持:javaconfig里@EnableTransactionManagement

只读:查询数据库,不修改的时候用,设置readonly。@transactional直接加在类上,作用于所有方法,这时候单独设置读取的方法的readonly

超时时间:

事务异常:

@rollbackfor,包含的异常,报错后回滚,【指定异常回滚】

@norollbackfor,排除掉某个异常,报出这个异常不回滚,一般不用【指定异常不会滚】

默认值runtime,建议指定成Exception

事务的隔离级别:修改isolation属性

事务的传播行为:

 

事务小总结:

1.先定义一个事务管理器的实现,插拔式

2.开启事务注解的支持

3.加入事务注解

区分

        编程式事务:

        声明式事务:有框架支持

七、Spring总结

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值