Spring-AOP-Spring02

    科技2025-09-21  75

    Spring-AOP-Spring02

    代理模式

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

    代理模式分类:

    静态代理动态代理

    静态代理

    角色分析:

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

    代码步骤:

    接口

    public interface Rent { public void rent(); }

    真实角色

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

    代理角色

    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("看房"); } }

    客户端访问代理角色

    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

    步骤:

    导入相关jar包 junitmybatismysqlspring相关aop织入mybatis-spring【new】 编写配置文件测试

    回忆mybatis

    编写实体类编写核心配置文件编写接口编写mapper.xml测试

    Mybatis-spring

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

    编写数据源sqlSessionFactorysqlSessionTemplate需要给接口加实现类将自己写的实现类注入到spring中测试使用

    声明式事务

    回顾事务

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

    事务的acid原则

    A:原子性

    C:一致性

    I:隔离型

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

    D:持久性

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

    spring中的事务管理

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

    思考:

    为什么需要事务

    如果不配置事务,可能存在数据提交不一致的情况如果我们不在srping中配置声明式事务,我们就需要做代码中手动陪孩子事务事务在项目的开发中十分重要,涉及到数据的一致性和完整性问题
    Processed: 0.010, SQL: 8