1:首先我们来简单了解一下spring的概念
它是一个 full-stack 框架,提供了从表现层到业务层再到持久层的一套完整的解决方案。我们在项目中可以只使用 spring 一个框架,
它就可以提供表现层的 mvc 框架,持久层的 Dao 框架。它的两大核心 IoC 和 AOP 更是为我们程序解耦和代码简洁易维护提供了支持
当然他还有一个不是功能的功能及集成其他框架(当年面试官问我的时候怎么也没想到…)。
2 本文将以spring aop的代理模式来介绍spring aop来介绍其原理及在日常工作中的使用。
2.1 首先介绍一下aop模块
AOP模块用于我们的Spring应用做面向切面的开发, 很多支持由AOP联盟提供,这样就确保了Spring和其他AOP框架的共通性。这个模块将元数据编程引入Spring。
2.2 aop原理
其实spring aop 主要采用了代理模式来实现面向切面的。整个spring的实现共使用了9种设计模式这里仅仅列举一下不做具体讲解
1.简单工厂
2. 工厂方法(Factory Method)
3. 单例(Singleton)(这个要着重掌握)
4. 适配器(Adapter)
5.包装器(Decorator)
6. 代理(Proxy)(我们今天的主角)
7.观察者(Observer)、
8. 策略(Strategy)
9.模板方法(Template Method)
什么是代理模式:代理模式的核心作用就是通过代理,控制对对象的访问。
它的设计思路是:定义一个抽象角色,让代理角色和真实角色分别去实现它。
(通俗的讲就是本来是自己的事 你不想做了交给别人去做了,列如 你把游戏交给代练)
2.3 代理模式分静态代理和动态代理
- 静态代理:简单理解代理对象和被代理对象可以直接确认及代理对象和被代理对象必须实现同一接口。看如下代码:
/**
* Created by hyl
* on 2020/4/23.
* 定义一个我的游戏接口
*/
public interface Game {
/**
* 定义 玩游戏的方法
*/
void playGame();
}
/**
* Created by hyl
* on 220/4/23.
* 定义一个我自己玩游戏的类
*/
public class MyGame implements Game {
//实现我自己的玩游戏的方法
@Override
public void playGame() {
//简单举例不做业务
System.out.println("我要陪女朋友我没时间玩....");
}
}
/**
* Created by hyl
* on 2020/4/23.
* 定义代理游戏对象
* 既然我想让你帮我代练 你肯定的会打游戏 所以也要实现 游戏接口
*/
public class ProxyGame implements Game {
//给一个接口 用来接收真实玩游戏的人
private Game game;
//通过构造的方法置入要被代理的对象
public ProxyGame(Game game) {
this.game = game;
}
@Override
public void playGame() {
System.out.println("我游戏代理");
game.playGame();
System.out.println("我游戏代理,我帮你打游戏");
}
}
/**
* Created by hyl
* on 2020/4/23.
*/
public class TestMain {
public static void main(String []ages){
Game myGame = new MyGame();
Game proxyGame = new ProxyGame(myGame);
proxyGame.playGame();
}