java 代理
代理模式:为对象包装一个代理,使得这个代理可以控制对目标对象的访问。
外界通过代理对象间接访问目标对象。
静态代理
- 代理对象拥有目标对象的句柄。
- 所有调用目标对象的方法,都通过调用代理对象来实现。
- 对于每一个目标对象的方法,都需要静态编码。即在代理对象中实现。
动态代理
- 代理对象对目标对象方法的调用,都会被代理处理器动态拦截。再由代理处理器使用反射的方式来执行。
- 代理处理器:
- 持有目标对象的句柄。
- 实现InnocationHandler接口:
1). 实现invoke方法。
2). 所有代理对象调用的方法,都会被动态拦截,转发到invoke方法中。
3). invoke方法中形参method就是代理对象中调用的具体方法。
- 代理对象:
1). 根据给定的接口,由Proxy类自动生成。
2). 通常和目标对象实现同样的接口。
3).可实现多个接口,当多个接口有同名的方法时,默认选择排在前面的接口中的方法。
面向切面编程(AOP)
面向对象:将需求和功能划分为不同的,独立的类;再通过继承,多态来实现相同和不同的功能。
面向切向:将需求功能从多个类中分离出来,当需要变换这个功能时,只需要进行相关切换即可,不需要修改原来的代码。
面向切面的优点:
- 分离代码,降低程序的耦合。
- 业务逻辑变换不需要修改源代码,不需要重启程序。
- 加快开发速度,将程序分成更多块进行编写和测试。