Spring-AOP-Spring02

Spring-AOP-Spring02

代理模式

为什么要学习代理模式,因为这就是Spring AOP的底层

代理模式分类:

  • 静态代理
  • 动态代理

静态代理

角色分析:

  • 抽象角色,一般会使用接口或抽象类解决
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
  • 客户:访问代理对象的人

代码步骤:

  1. 接口

    public interface Rent {
    
        public void rent();
    
    }
    
  2. 真实角色

    //房东
    public class Host implements Rent{
    
        public void rent() {
            System.out.println("房东租房");
        }
    }
    
  3. 代理角色

    public class Proxy implements Rent {
    
        private Host host;
    
        public Proxy() {
    
        }
    
        public Proxy(Host host) {
            this.host = host;
        }
    
        public void rent() {
            host.rent();
        }
    
        public void seeHouse() {
            System.out.println("看房");
        }
    }
    
  4. 客户端访问代理角色

    public class Client {
    
        public static void main(String[] args) {
            Host host = new Host();
            Proxy proxy = new Proxy(host);
            proxy.rent();
            proxy.seeHouse();
        }
    
    }
    

代理模式的好处:

  • 可以使真实角色的操作更纯粹,不用关注公共业务
  • 公共就交给代理角色,实现业务分工
  • 公共业务出现扩展,方便扩展处理

缺点:

一个真实角色会产生一个代理角色,代码会翻倍

动态代理

动态代理和静态代理角色一样

动态代理的代理类是动态生成的不是我们直接写好的

动态代理分为两大类:基于接口的动态代理,基于类的动态代理

基于接口-JDK动态代理

基于类:cglib

字节码实现: javassist

两个类:Proxy 代理和InvocationHander反射包下的接口

动态代理好处:

  • 可以使真实角色操作更加纯粹,不用关注一些公共业务

  • 公共也可以交给代理角色,

    公共业务发生扩展的时候,方便集中管理

    一个动态代理类代理的是一个接口

    一个动态代理类可以代理多个类,只要实现了通个接口

什么是AOP

面向切面编程

使业务耦合性降低,提高可重用性

AOP在spring中作用

提供声明式事务,允许用户自定义切面

<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
</dependency>

方式一:使用spring的api接口

方式二:使用自定义类

方式三:使用注解实现

整合mybatis

步骤:

  1. 导入相关jar包
  • junit
  • mybatis
  • mysql
  • spring相关
  • aop织入
  • mybatis-spring【new】
  1. 编写配置文件
  2. 测试

回忆mybatis

  1. 编写实体类
  2. 编写核心配置文件
  3. 编写接口
  4. 编写mapper.xml
  5. 测试

Mybatis-spring

http://mybatis.org/spring/zh/getting-started.html

  1. 编写数据源
  2. sqlSessionFactory
  3. sqlSessionTemplate
  4. 需要给接口加实现类
  5. 将自己写的实现类注入到spring中
  6. 测试使用

声明式事务

回顾事务

  • 把一组业务当成一个业务来做,要么都成功,要么都失败
  • 事务在项目开发中十分重要,涉及到数据一致性问题
  • 确保完整性和一致性

事务的acid原则

A:原子性

C:一致性

I:隔离型

多个业务可能操作同一个资源,防止数据损坏

D:持久性

事务一旦提交,无论系统发生什么问题,结果不会被影响,被持久化到存储器中

spring中的事务管理

  • 声明式事务:AOP
  • 编程式事务:需要做代码中,进行事务的管理

思考:

为什么需要事务

  • 如果不配置事务,可能存在数据提交不一致的情况
  • 如果我们不在srping中配置声明式事务,我们就需要做代码中手动陪孩子事务
  • 事务在项目的开发中十分重要,涉及到数据的一致性和完整性问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值