18、静态代理再理解

9.3、静态代理再理解

同学们练习完毕后,我们再来举一个例子,巩固大家的学习!

18、静态代理再理解

 

练习步骤:

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

//抽象角色:增删改查业务

public interface UserService {

   void add();

   void delete();

   void update();

   void query();

}

18、静态代理再理解

 

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

//真实对象,完成增删改查操作的人

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("查询了一个用户");

  }

}

18、静态代理再理解

 

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

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

//代理角色,在这里面增加日志的实现

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+"方法");

  }

}

18、静态代理再理解

 

5、测试访问类:

public class Client {

   public static void main(String[] args) {

       //真实业务

       UserServiceImpl userService = new UserServiceImpl();

       //代理类

       UserServiceProxy proxy = new UserServiceProxy();

       //使用代理类实现日志功能!

       proxy.setUserService(userService);

       proxy.add();

  }

}

18、静态代理再理解

 

 

OK,到了现在代理模式大家应该都没有什么问题了,重点大家需要理解其中的思想;

我们在不改变原来的代码的情况下,实现了对原有功能的增强,这是AOP中最核心的思想

聊聊AOP:纵向开发,横向开发

18、静态代理再理解

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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