spring aop 必须的包 及里面用到的东西_极光小课堂 | Spring 框架总结

一、Spring 简介

Spring 是一个开源轻量级框架, 用于替代 EJB。核心的主要部分:

  • (1) IOC: 控制反转,让 spring 来创建和管理对象而不需要new

  • (2) AOP: 面向切面,扩展功能不用修改源代码实现

Spring 框架为 j2ee 全家桶提供一站式解决方案:

  • 在 web 层中有: spring MVC

  • 在 service 层中有: spring 的 IOC

  • 在 dao 层中有: spring 的 jdbc Template

二、Spring 核心之 IOC

IOC 作用: 把对象的创建交给spring管理。


IOC 和 DI 的区别:

  • IOC:控制反转,把对象创建交给 Spring 进行配置(创建对象)

  • DI: 依赖注入向类里面的属性设置值 ( 操作对象的属性)

  • 关系:依赖注入不能单独存在,需要在 IOC 基础之上完成操作

1 IOC 底层原理使用的技术
  • dom4j 解析 xml

  • 工厂设计模式

  • 反射

2 实现 IOC 操作的两种方式
  • IOC 的配置文件方式

  • IOC 的注解方式

3 IOC 入门案例 3.1 导包

核心四个 jar 包

支持日志输出的 jar 包

3.2 创建

创建 Spring 配置文件,配置创建类:

  • Spring 核心配置文件的名称和位置可随意,建议放到 src 下面,官方建议名称:applicationContext.xml;

  • 引入schema 约束;

  • 配置对象的创建;

3.3 测试

写代码测试对象的创建:

  • 加载 Spring 配置文件, 根据创建对象:
    ApplicationContext context = new ClassPathXmlApplicationContext("xdx.xml");

  • 得到配置创建的对象:
    context.getBean("xdx");

3.4 整合

Spring 整合 web 项目原理:

  • 在合适的地方加载 Spring 核心配置文件;

  • 实现思想:在服务器启动时完成加载 文件和创建对象的过程;

  • 实现原理(Spring 已封装好):
    1、在服务器启动的时候,为每个项目创建一个ServletContext 对象;
    2、在ServletContext 对象创建的时候 ,使用监听器可以具体 到ServletContext 对象有什么时候创建;
    3、当监听器监听 到 ServletContext 对象创建的时候 ,加载 Spring 配置文件并根据配置文件创建对象,再把创建出来的对象放进 ServletContext 域中;
    4、到 ServletContext 获取相关对象;

三、Spring 对 Bean 的管理

Bean 实例化的三种方式:


1、使用类的无参构造创建【重点】
2、使用静态工厂方法创建
3、使用实例工厂创建

1 Bean 的 xml 方式配置

Bean 标签常用属性:
1、id 属性:起名称, 根据id值得到配置对象, 不可包含特殊符号
2、class 属性: 创建对象所在类的全路径
3、name 属性: 根据 id 是一样的,现在少用, 可包含特殊符号
4、scope 属性: bean作用范围, 单例 singleton、多例 prototype、请求 request、会话 session、全局会话

Bean 属性注入方式 (Spring支持前两种)1、使用 set 方法注入【重点】: 标签

2、构造方法: 标签
3、使用接口注入
4、注入复杂类型:数组、list 集合、map 集合、properties 类型

2 Bean  注解配置

什么是注解:代码里的特殊标记
怎么写注解: @注解名称(属性名称=属性值)
哪里可以用注解: 类、方法、属性

Spring 注解开发的步骤:
1、导入相关 jar 包
2、创建类和方法
3、创建 Spring 配置文件,引入约束
4、加入开启注解扫描标签

3 注解创建对象

1、在创建对象的类上面加个注解 @Component(value = "xdx") value 可省略。 


2、创建对象有四个注解:
@Component
@Controller 建议在 Web 层使用
@Service 建议在业务层使用
@Repository 建议在 Dao 层使用


目前这四个注解的功能是一样,随便用,后续版本可能会对其增强。在开发时为了清晰,建议在相应的层选择对应的注解名称。创建对象时控制是单例还是多例的注解 @Scope

3、注解注入属性举例:
使用注解注入属性不需要 set 方法,非常方便。
创建 service 类,创建 dao 类,并加上相应注解。
service 类里加上@Autowired,也可以用@Resource(name = "xdx")注解来代替@Autowired, 用@Resoure 要指定 name 属性。

4、注解和配置文件混合使用:
创建对象使用配置文件方式,而不是加@Component这些注解了。
注入属性操作时用注解实现 ,用@Resoure(name = "")

四、Spring 核心之 AOP1 概述

AOP 即面向切面(方面)编程,扩展功能不通过修改源代码来实现,它使用了横向的抽取机制,取代了传统通过纵向继承来扩展功能时产生的重复性代码,AOP 本身对性能有一定影响。

2 底层原理

动态代理方式:

有接口的情况: 使用动态代理方式,创建接口实现代理对象 jdk 动态代理。
无接口的情况: 创建某个类的子类的代码对象 cglib 动态代理。

3 AOP 术语

AOP 的常用操作和相关术语:

1、Joinpoint (连接点) : 指我们要对哪些连接点进行拦截定义,比如: 类里的哪些方法可以被增强,这些方法就叫做连接点。


2、Pointcut (切入点): 在类里面可以有很多方法被增强,但实际中只增强了部分方法,这些被增强了的方法就叫切入点。


3、Advice (通知/增强): 增强的那些逻辑就称为增强,比如扩展日志功能,这个日志功能就称为增强。


通知/增强类型有:

a. 前置通知: 在方法之前执行
c. 后置通知: 在方法之后执行
d. 环绕通知: 在方法之前和之后执行
e. 异常通知: 方法出现异常时执行

f.  最终通知: 在后置通知之后执行


4、AspectJ (切面): 把增强应用到具体的方法上面, 这个过程就叫做切面。

总结: 概念坑人,切面是一个动词并不是名词; Advice 指增强的逻辑,注意是逻辑; 切入点就是增强后的方法(连接点)。

4 AOP 操作

在 Spring 里面进行aop操作,使用 AspectJ 实现:


a. AspectJ 是一个面向切面的框架, 它扩展了 java 语言。AspectJ 定义了 Aop 语法,所以它有一个编译器来生成字节码规范的 class 文件。
b. AspectJ 不是 Spring 的一部分,和 Spring 一起进行 Aop 操作。
c. Spring从2.0以后增加了对 AspectJ 的支持。
d. 使用 AspectJ 实例 AOP 有两种实现方式:基于 AspectJ 的xml配置文件方式;基于AspectJ 的注解方式。

基于 AspectJ 的xml配置文件方式步骤:

  • Aop 操作准备: 基本 Jar 包,和 Aop 相关 Jar 包

  • 创建 Spring 核心配置文件, 导入 Aop 约束

  • 创建 Bean

  • 配置 Aop aop:config 先配置切入点,再配置切面

使用表达式配置切入点,实际增强的方法:

execution (?)
举例: execution(* 全限定类名.方法名()) 方法名可以用通配符,全部或者通配部分方法都可以。

使用注解实现 AOP 操作(简单):

  • 创建 Bean

  • 开启 Aop

  • 增强类上面使用注解来完成,Aop操作方法上加注解, 如:

5677a32cb16918bad6475b5f74b73d27.png

注意如果只用包名, 最后必须有两点。

五、Spring 核心之 AOP

Spring 配置连接池使用 Jdbc Template:

"jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">"dataSource" ref="dataSource" />

"dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">"driverClassName" value="com.mysql.jdbc.Driver" />"url" value="jdbc:mysql://localhost:3306/test" />"username" value="root" />"password" value="root" />

Dao 使用 Jdbc Template:

@Resource

private JdbcTemplate jdbcTemplate

六、Spring 事务管理

1 事务

什么是事务:###

事务特性:原子性、一致性、隔离性、持久性


不考虑隔离性产生读问题: 脏读、不可重复读、幻读
解决读问题:设置隔离级别

2 Spring 事务管理 API

Spring 事务管理两种方式:

1、编程式事务管理(不用)

2、声明式事务管理

基于 xml 配置文件实现:

1、首先配置事务管理器
2、配置事务增强
3、配置切面

基于注解方式实现:
1、首先配置事务管理器, 不同的 ORM 框架用的事务不同

"transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    name="dataSource" ref="dataSource" />

2、配置事务注解

transaction-manager="transactionManager"/>

3、在要使用事务的方法所在的类上面添加注解,以下是示例,出现异常时回滚

@Transactional(rollbackForClassName = "Exception")

3 Spring 事务的隔离级别

ca524bea1b119c13a0423965310d5782.png

fd15f8f782bbb2d1a309727cb882c70e.gifEND fd15f8f782bbb2d1a309727cb882c70e.gif 关于极光

极光(Aurora Mobile,纳斯达克股票代码:JG)成立于2011年,是中国领先的开发者服务提供商。极光专注于为移动应用开发者提供稳定高效的消息推送、即时通讯、统计分析、极光分享、短信、一键认证、深度链接等开发者服务。截止到2019年12月份,极光已经为超过50万移动开发者和145.2万款移动应用提供服务,其开发工具包(SDK)安装量累计336亿,月度独立活跃设备13.6亿部。同时,极光持续赋能开发者和传统行业客户,推出精准营销、金融风控、市场洞察、商业地理服务产品,致力于为社会和各行各业提高运营效率,优化决策制定。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值