Spring--静态代理再理解&AOP

71 篇文章 5 订阅

Spring

01: Spring简介
02: Spring–Spring组成及拓展
03: Spring–IoC理论推导&IoC本质
04: Spring–第一个Spring程序HelloSpring&修改上节案例
05: Spring–IoC创建对象方式
06: Spring–Spring配置
07: Spring–依赖注入(Dependency Injection)
08: Spring–Bean的作用域
09: Spring–自动装配Bean(使用自动装配xml配置)
10: Spring–使用注解实现自动装配(推荐使用)
11: Spring–注解开发
12: Spring–使用JavaConfig实现配置
13: Spring–静态代理再理解&AOP
14: Spring–AOP(通过 Spring API 实现&自定义类来实现Aop&使用注解实现)
15: Spring–回忆Mybatis
16: Spring–整合Mybatis
17: Spring–Spring声明式事务


1. Spring–静态代理再理解

我们想要去增强原来类的方法


1.1 创建一个抽象角色,比如咋们平时做的用户业务,抽象起来就是增删改查!

UserService.java

//抽象角色:增删改查业务
public interface UserService {
   void add();
   void delete();
   void update();
   void query();
}

1.2 我们需要一个真实对象来完成这些增删改查操作

UserServiceImpl.java

package com.tian.staicProxy;

//真实对象,完成增删改查操作的人
public class UserServiceImpl implements UserService {

    public void add() {
        System.out.println("增加了一个用户");
    }

    public void delete() {
        System.out.println("删除了一个用户");
    }

    public void update() {
        System.out.println("更新了一个用户");
    }

    public void query() {
        System.out.println("查询了一个用户");
    }
}

1.3 需求来了,现在我们需要增加一个日志功能,怎么实现!

  • 思路1 :在实现类上增加代码 【麻烦!
  • 思路2:使用代理来做,能够不改变原来的业务情况下,实现此功能就是最好的了!

1.4 设置一个代理类来处理日志!代理角色

UserServiceProxy.java

package com.tian.staicProxy;

//代理角色,在这里面增加日志的实现
public class UserServiceProxy implements UserService {
    private UserServiceImpl userService;

    public void setUserService(UserServiceImpl userService) {
        this.userService = userService;
    }

    public void add() {
        log("add");
        userService.add();
    }

    public void delete() {
        log("delete");
        userService.delete();
    }

    public void update() {
        log("update");
        userService.update();
    }

    public void query() {
        log("query");
        userService.query();
    }

    public void log(String msg) {
        System.out.println("执行了" + msg + "方法");
    }

}

1.5 测试访问类:

Client.java

package com.tian.staicProxy;

public class Client {
    public static void main(String[] args) {
//        真实业务
        UserServiceImpl userService = new UserServiceImpl();
//        代理类
        UserServiceProxy userServiceProxy = new UserServiceProxy();
//        使用代理类来实现日志功能
        userServiceProxy.setUserService(userService);
        userServiceProxy.add();
    }
}

运行结果:
在这里插入图片描述


1.6 小结

我们在不改变原来的代码的情况下,实现了对原有功能的增强,这是AOP(AOP为Aspect Oriented Programming的缩写,意为:面向切面编程)中最核心的思想

聊聊AOP:纵向开发,横向开发
在这里插入图片描述



  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeJiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值