AOP:静态代理实现方式①通过继承②通过接口
文件结构:
添加日志:
package com.wangcf.manager; public class LogManager { public void add(){
System.out.println("添加日志...");
}
}
权限检查:
package com.wangcf.manager; public class AuthorityManager {
public boolean isAllown(){
boolean flag=true;
System.out.println("权限检查..");
return true;
}
}
①:通过继承方式
基类:
package com.wangcf.manager.proxy; import com.wangcf.entity.User;
import com.wangcf.manager.imp.IUserManager; public class UserManager implements IUserManager{ public void add(User user){
System.out.println("UserManager add...");
} public void del(User user){
System.out.println("UserManager del...");
} public void update(User user){
System.out.println("UserManager update...");
}
}
Proxy1继承基类
package com.wangcf.manager.proxy; import com.wangcf.entity.User;
import com.wangcf.manager.LogManager; public class UserManagerProxy1 extends UserManager{ private LogManager logManager; public UserManagerProxy1() {
// TODO Auto-generated constructor stub
this.logManager=new LogManager();
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
this.logManager.add();
super.add(user);
}
}
Proxy2继承Proxy1
package com.wangcf.manager.proxy; import com.wangcf.entity.User;
import com.wangcf.manager.AuthorityManager; public class UserManagerProxy2 extends UserManagerProxy1{ private AuthorityManager autManager; public UserManagerProxy2() {
// TODO Auto-generated constructor stub
this.autManager=new AuthorityManager();
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
this.autManager.isAllown();
super.add(user);
}
}
Proxy3这是继承的另一种方式:
package com.wangcf.manager.proxy; import com.wangcf.entity.User;
import com.wangcf.manager.AuthorityManager;
import com.wangcf.manager.LogManager; public class UserManagerProxy3 extends UserManager{ private LogManager logManager;
private AuthorityManager autManager; public UserManagerProxy3() {
// TODO Auto-generated constructor stub
this.autManager=new AuthorityManager();
this.logManager=new LogManager();
}
@Override
public void add(User user) {
// TODO Auto-generated method stub
this.autManager.isAllown();
this.logManager.add();
super.add(user);
}
}
测试类:
package com.wangcf.test; import com.wangcf.manager.proxy.UserManager;
import com.wangcf.manager.proxy.UserManagerProxy1;
import com.wangcf.manager.proxy.UserManagerProxy2;
import com.wangcf.manager.proxy.UserManagerProxy3;
/**
* 继承方式静态代理
* @author fan
*
*/
public class TestAction1 {
public static void main(String[] args) {
//只是实例不一样,这个是用代理继承方式实例化的
UserManager userManager1=new UserManagerProxy1();
userManager1.add(null);
System.out.println("===========================");
UserManager userManager2=new UserManagerProxy2();
userManager2.add(null);
System.out.println("===========================");
UserManager userManager3=new UserManagerProxy3();
userManager3.add(null);
}
}
结果:
②通过接口
接口:
package com.wangcf.manager.imp; import com.wangcf.entity.User; public interface IUserManager { public void add(User user); public void del(User user); public void update(User user);
}
实现接口
Proxy1
package com.wangcf.manager.imp; import com.wangcf.entity.User;
import com.wangcf.manager.LogManager; public class UserManagerProxy1 implements IUserManager{ private IUserManager userManager;
private LogManager logManager; public UserManagerProxy1(IUserManager userManager) {
// TODO Auto-generated constructor stub
this.userManager=userManager;
this.logManager=new LogManager();
} @Override
public void add(User user) {
// TODO Auto-generated method stub
this.logManager.add();
userManager.add(user);
} @Override
public void del(User user) {
// TODO Auto-generated method stub
this.logManager.add();
userManager.del(user);
} @Override
public void update(User user) {
// TODO Auto-generated method stub
this.logManager.add();
userManager.update(user);
} }
Proxy2
package com.wangcf.manager.imp; import com.wangcf.entity.User;
import com.wangcf.manager.AuthorityManager; public class UserManagerProxy2 implements IUserManager{ private IUserManager userManager;
private AuthorityManager authorityManager;
public UserManagerProxy2(IUserManager userManager) {
// TODO Auto-generated constructor stub
this.userManager=userManager;
this.authorityManager=new AuthorityManager();
} @Override
public void add(User user) {
// TODO Auto-generated method stub
this.authorityManager.isAllown();
userManager.add(user);
} @Override
public void del(User user) {
// TODO Auto-generated method stub
this.authorityManager.isAllown();
userManager.del(user);
} @Override
public void update(User user) {
// TODO Auto-generated method stub
this.authorityManager.isAllown();
userManager.update(user);
} }
测试类:
package com.wangcf.test; import com.wangcf.manager.imp.IUserManager;
import com.wangcf.manager.imp.UserManagerProxy1;
import com.wangcf.manager.imp.UserManagerProxy2;
import com.wangcf.manager.proxy.UserManager;
/**
* 实现接口的方式静态代理
* @author fan
*
*/
public class TestAction2 {
public static void main(String[] args) {
UserManager userManager = new UserManager();
IUserManager iUserManager=new UserManagerProxy1(userManager);
iUserManager.add(null);
System.out.println("1=============");
//和上面的一样
IUserManager userManager2=new UserManagerProxy1(new UserManager());
userManager2.add(null);
System.out.println("2===========");
IUserManager userManager3=new UserManagerProxy2(userManager2);
userManager3.add(null);
}
}
打印:
AOP:静态代理实现方式①通过继承②通过接口的更多相关文章
- AOP:代理实现方式①通过继承②通过接口
文件结构: 添加日志: package com.wangcf.manager; public class LogManager { public void add(){ System.out.prin ...
- AOP静态代理解析1-标签解析
AOP静态代理使用示例见Spring的LoadTimeWeaver(代码织入) Instrumentation使用示例见java.lang.instrument使用 AOP的静态代理主要是在虚拟机启动 ...
- Java中的静态代理实现方式
1.编写一个接口类 如:Subject package com.neusoft.pattern.staticProxy; /** * <p>Title:</p> * <p ...
- spring——AOP(静态代理、动态代理、AOP)
一.代理模式 代理模式的分类: 静态代理 动态代理 从租房子开始讲起:中介与房东有同一的目标在于租房 1.静态代理 静态代理角色分析: 抽象角色:一般使用接口或者抽象类来实现(这里为租房接口) pub ...
- spring(AOP)静态代理
姓名:黄于霞 班级:软件151 1.定义抽象主题接口,假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: 2.主题类,算术类,实现抽象接口. 3.代理类 4.测试运行 5.总 ...
- AOP静态代理解析2-代码织入
当我们完成了所有的AspectJ的准备工作后便可以进行织入分析了,首先还是从LoadTimeWeaverAwareProcessor开始. LoadTimeWeaverAwareProcessor实现 ...
- Java代理模式精讲之静态代理,动态代理,CGLib代理
代理(Proxy)是一种设计模式,通俗的讲就是通过别人达到自己不可告人的目的(玩笑). 如图: 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象 这三个代理模式,就 ...
- Java静态代理&动态代理&Cglib代理详解
一.静态代理 根据被代理的类的时机的不同,如果在编译阶段就能确定下来的被代理的类是哪一个,那么,就可以使用静态代理的方式. 申明一个接口: /** * @author jiaqing.xu@hand- ...
- 动态代理的两种方式,以及区别(静态代理、JDK与CGLIB动态代理、AOP+IoC)
Spring学习总结(二)——静态代理.JDK与CGLIB动态代理.AOP+IoC 目录 一.为什么需要代理模式 二.静态代理 三.动态代理,使用JDK内置的Proxy实现 四.动态代理,使用cg ...
随机推荐
- LR分析-demo2
0.LR分析 用一个栈来保存文法符号和状态的信息,一个字符串保存输入信息. 使用栈顶的状态符号和当前的输入符号来检索分析表,来决定移进-归约分析的动作. 1.样例文法 "E>E+T&q ...
- Ubuntu install 错误 E:Unable to locate package
今天在 Ubuntu 上执行 sudo apt install sl 命令,结果报错:E:Unable to locate package sl 上网查询了一下,先更新一下 apt-get,执行:su ...
- 偏前端--之小白学习本地存储与cookie
百度了很多都是讲的理论,什么小于4kb啊之类的,小白看了一脸懵逼复制到html中为什么没效果!!哈哈.我来写一个方便小白学习. 贴图带文字描述,让小白也运行起来,然后自己再去理解... 1. cook ...
- 笔记:HTML5中input元素新增的type值
在HTML5中,input元素的type值增加了不少,使input的功能强大了很多. 但在各大浏览器中并不是所有的type值都支持. 以下是比较有用.并且浏览器支持的稍好一些的值: type=colo ...
- 高性能MySQL--MySQL数据类型介绍和最优数据类型选择
MySQL支持的数据类型很多,那么选择合适的数据类型对于获得高性能就至关重要.那么就先了解各种类型的优缺点! 一.类型介绍 1.整型类型 整型类型有: TINYINT,SMALLINT,MEDIUMI ...
- 树莓派3B+学习笔记:7、挂载exfat格式U盘
树莓派的官方系统,默认不支持exfat格式U盘挂载. 插入exfat格式U盘会出现以下错误提示: 安装exfat-fuse后可以正常识别,需要在命令行执行以下命令,按“y”键回车确认: sudo ap ...
- STM32(6)——USART串口的使用
1. 串口的基本概念 在STM32的参考手册中,串口被描述成通用同步异步收发器(USART),它提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换.USART利用 ...
- sourcetree的安装及使用
sourcetree下载地址:https://www.sourcetreeapp.com/ 点击安装包安装 此前需要跳转到bitbucket登录,我没有账号,所以我直接跳转到到https://bitb ...
- 欧几里得算法/欧几里得扩展算法-python
说在开头. 出于对欧几里得的尊重,先简单介(cou)绍(ge)一(zi)下(shu).. 欧几里得,古希腊人,数学家.他活跃于托勒密一世时期的亚历山大里亚,被称为“几何之父”. 他最著名的著作< ...
- react work with angularjs together
http://blog.500tech.com/using-reactjs-with-angularjs/ http://www.funnyant.com/reactjs-what-is-it/ ht ...