文件结构:

添加日志:

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:静态代理实现方式①通过继承②通过接口的更多相关文章

  1. AOP:代理实现方式①通过继承②通过接口

    文件结构: 添加日志: package com.wangcf.manager; public class LogManager { public void add(){ System.out.prin ...

  2. AOP静态代理解析1-标签解析

    AOP静态代理使用示例见Spring的LoadTimeWeaver(代码织入) Instrumentation使用示例见java.lang.instrument使用 AOP的静态代理主要是在虚拟机启动 ...

  3. Java中的静态代理实现方式

    1.编写一个接口类 如:Subject package com.neusoft.pattern.staticProxy; /** * <p>Title:</p> * <p ...

  4. spring——AOP(静态代理、动态代理、AOP)

    一.代理模式 代理模式的分类: 静态代理 动态代理 从租房子开始讲起:中介与房东有同一的目标在于租房 1.静态代理 静态代理角色分析: 抽象角色:一般使用接口或者抽象类来实现(这里为租房接口) pub ...

  5. spring(AOP)静态代理

    姓名:黄于霞      班级:软件151 1.定义抽象主题接口,假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: 2.主题类,算术类,实现抽象接口. 3.代理类 4.测试运行 5.总 ...

  6. AOP静态代理解析2-代码织入

    当我们完成了所有的AspectJ的准备工作后便可以进行织入分析了,首先还是从LoadTimeWeaverAwareProcessor开始. LoadTimeWeaverAwareProcessor实现 ...

  7. Java代理模式精讲之静态代理,动态代理,CGLib代理

    代理(Proxy)是一种设计模式,通俗的讲就是通过别人达到自己不可告人的目的(玩笑). 如图: 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象 这三个代理模式,就 ...

  8. Java静态代理&动态代理&Cglib代理详解

    一.静态代理 根据被代理的类的时机的不同,如果在编译阶段就能确定下来的被代理的类是哪一个,那么,就可以使用静态代理的方式. 申明一个接口: /** * @author jiaqing.xu@hand- ...

  9. 动态代理的两种方式,以及区别(静态代理、JDK与CGLIB动态代理、AOP+IoC)

    Spring学习总结(二)——静态代理.JDK与CGLIB动态代理.AOP+IoC   目录 一.为什么需要代理模式 二.静态代理 三.动态代理,使用JDK内置的Proxy实现 四.动态代理,使用cg ...

随机推荐

  1. restframework序列化字段和字段构造方式

  2. 大数据时代的结构化存储--HBase

    迄今,相信大家肯定听说过 HBase,但是对于 HBase 的了解可能仅仅是它是 Hadoop 生态圈重要的一员,是一个大数据相关的数据库技术. 今天我带你们一起领略一下 HBase 体系架构,看看它 ...

  3. Call to a member function allowField() on null 错误总结

    Call to a member function allowField() on null 在空对象上调用  allowField() 没有该模型对象无法调用,需要创建相应的模型 错误版本: if ...

  4. sqoop import/export使用经验

    一.先创建一个小表(test_01)进行测试(主节点IP:169.254.109.130/oracle服务器IP:169.254.109.100) 1.测试连接oracle; sqoop list-t ...

  5. python 3下对stm32串口数据做解析

    1.最近有个想做一个传感器数据实时显示的上位机,常规的数据打印太频繁了,无法直观的看出数据的变化. python下的上位机实现起来简单一点,网上找了一些python界面Tkinter相关资料和pyth ...

  6. 【LG3237】[HNOI2014]米特运输

    题面 洛谷 题解 代码 #include <iostream> #include <cstdio> #include <cstdlib> #include < ...

  7. 2762 helloparty·开车

    2762 helloparty·开车 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold   题目描述 Description hellokitty的一个朋友要来他家,但是 ...

  8. sqlserver安装遇到的问题——1

    SQL Server安装过无数次,今天第一次遇到这样的问题 一.问题消息复制出来是这样的 TITLE: Microsoft SQL Server 2008 R2 安装程序--------------- ...

  9. springboot中maven加入本地jar

    一.今天遇到一个问题,在使用springboot打jar的时候出现了本地依赖包打不进去的情况.然后在网上试了很多方式.这里做一个记录 二.加入本地依赖包 <dependency> < ...

  10. 准备正式开始学习C++,先发点牢骚

    由于职业关系,经常使用AutoCAD之类绘图软件,但这些软件平台的功能,对专业的应用细节来说,并不能全都照顾到,需要一些二次开发,提升一些个性化操作的效率.软件本身也大多提供了开发软件包,AutoCA ...