Spring框架 基础知识 (笔记)

4 篇文章 0 订阅
3 篇文章 0 订阅

1、spring是什么?
spring是一个轻量级的企业级应用开发的框架,spring的核心是控制反转(IOC)、面向切面编程(AOP)和依赖注入
2、spring入门程序
(1)导入jar
spring的核心配置文件 applicationContext.xml(默认)
作用:用户配置所有的类(对象),这些类可以成为springBean
(2)核心类
ApplicationContext(接口):创建或者获取springBean
3、IOC控制反转
控制反转Inversion of Controll :把对象的创建、初始化、销毁等工作交给spring容器,让spring容器来管理这些对象的生命周期
IOC不是一种技术,而是一种面向对象编程的思想,可以设计出松耦合度、优良的程序
包括:依赖注入DI(核心)依赖查找
4、spring的注入
当实例化某个对象的时候,由外部容器来设置这个对象的属性值
属性值的注入,一定要有对应的set方法
property:当前配置的类的属性
name: 属性的名字 value:注入的值
ref:指向其他bean的id
5、Bean的作用域
作用域 scope
默认为singleton :单例模式。只有一份实例
prototype:原型模式。每次通过spring容器来获取springbean时,容器都会创建一个新的实例进行返回
request:同一请求是同一个实例
session:同一会话是同一个实例
6、spring的装配方式
基于XML配置文件的注解方式
(1)必须有setter方法
(2)必须有无参构造方法
基于注解的装配方式(常用方式)
把当前注解的类声明为springbean,默认名字为首字母小写的全拼
相当于
@Component 用于管理注解的通用模式
@Repository 用于持久层,表示当前是持久层
@Service 用于服务层,表示当前是服务层
@Controller 用于控制层,表示当前是控制层
@Autowired 通过类型查找匹配,注入属性,回到spring的bean去根据当前配置的对象的类型去查找。局限性:不能有多余一个的实现类
扫描包:
<context:component-scan base-package=“cn.*”></context:component-scan>

7、AOP
开发时,核心业务代码与系统服务代码是相对独立的。运行时核心业务执行时,拥有系统服务的功能。实现这种效果的技术就是AOP
AOP:面向切面编程,采用的是横向抽取机制,将分散在各个方法上的重复代码提取出来,然后在程序编译或者是运行时,再将这些提取出来的代码运用到需要执行的地方
AOP的本质就是代理。对方法进行增强
JDK的动态代理  基于接口的
CGLIB代理  基于子类的
8、spring AOP面向接口编程
Advice(通知):AOP在特定切点上执行的增强处理。在什么时间点上进行的增强,在方法执行之前?执行之后?抛出异常后?
Pointcut(切点):对那些类、那些方法进行增强。

Aspect切面:通常是一个类,里面定义了通知和切点
AOP = 通知+切点
通知的类型
前通知:方法执行之前
后通知:方法执行以后
返回后通知:成功返回后
异常通知:发生异常后的通知
环绕通知:在方法的执行前后进行增强
PointCut切点
JDKRegexpPatternPointCut 基于正则表达式的切点
AspectJExpressionPointCut 基于AOP的切点表达式

AspectJ开发
配置文件的方式


配置通知类

aop:config
定义切面
<aop:aspect ref=“myAdvice”>
定义一个切点使用AspectJ切点表达式 execution(返回类型 方法路径)
:代表任意类型或是类上的所有
“…”:代表任意多个,0~N个都可以
括号前面代表的是方法名
execution( cn..(…)):返回值类型是任意类型的。cn包下的所有类,不包括子包下的。任意方法,任意参数
<aop:pointcut expression=“execution(* cn.bean.User.*())”
id = “cut1”/>
配置前通知 method:增强执行的方法
<aop:before method=“doBefore” pointcut-ref=“cut1”/>
后通知,又称为最终通知,无论如何都会执行
<aop:after method=“doAfter” pointcut-ref=“cut1”/>
返回后通知,只有正常返回才执行
<aop:after-returning method=“returnAfter” pointcut-ref=“cut1”/>
异常通知,只有异常抛出时才会执行
<aop:after-throwing method=“doThrow” pointcut-ref=“cut1”/>
环绕通知:在方法的执行前后进行一些增强
= 前通知+返回后通知
<aop:around method=“around” pointcut-ref=“cut1”/>
</aop:aspect>
</aop:config>
spring 和 mybatis整合
整合思想:
mybatis:持久层框架、只进行JDBC的操作
spring:容器,管理类的,并且可以设计为scope为单例。管理会话工厂,声明为springbean ,spring来代理mapper接口的实现类,生命为springbean
会话工厂SqlSessionFactory,特点:一旦创建就一直存在。设置为单例。
mapper动态代理的方式,
<?xml version="1.0" encoding="UTF-8"?>

读取外部资源文件
<context:property-placeholder location=“classpath:db.properties”>
需要配置的信息 1、会话工厂 2、mapper代理bean 3、数据库连接池
配置数据库连接池

 

 


配置会话工厂

注入数据源

加载mybatis的全局配置文件

批量起别名


配置mapper代理bean,使用包扫描的方式,批量创建mapper的代理bean。 并且bean的名字就是接口的名字,首字母小写

指定mapper接口所在的包路径


注解扫描
<context:component-scan base-package=“com.hpe.service.*”></context:component-scan>

spring的声明式事务
xml配置文件方式
spring事务管理的配置
事务管理器 spring的声明式事务

注入数据源


事务的通知
<tx:advice id=“txadvice” transaction-manager=“transactionManager”>
tx:attributes
需要切的方法
propagation=“REQUIRED”:默认值,当前方法必须运行在一个事务中,如果当前没有事务,则会开启一个新的事务,如果有,则直接使用当前的事务
propagation=“SUPPORTS”:当前方法如果运行在事务中,则使用当前的事务;如果当前没有事务,则不使用事务
<tx:method name="" propagation=“REQUIRED”/>
<tx:method name="select" propagation=“SUPPORTS”/>
</tx:attributes>
</tx:advice>
AOP的事务管理
aop:config
切点
<aop:pointcut expression=“execution(* com.hpe.service….(…))” id=“cut1”/>
<aop:advisor advice-ref=“txadvice” pointcut-ref=“cut1”/>
</aop:config>

注解事务
开启注解事务
<tx:annotation-driven transaction-manager=“transactionManager”/>
@Transactional 可以注解到方法上,表示当前方法进事务管理
注解到类上,表示当前类所有的方法都进行事务管理
注意:spring的事务管理,一定要对进行事务管理的地方往外抛异常,而不能try…catch,如果想主动地对事务进行回滚,可以往外抛异常throw new RuntimeException()。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值