文件结构:

添加日志:

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. Spring进阶之路(10)-Advice简单介绍以及通过cglib生成AOP代理对象

    Advice简单介绍 1. Before:在目标方法运行之前运行织入.假设Before的处理中没有进行特殊的处理.那么目标方法终于会运行,可是假设想要阻止目标方法运行时.能够通过抛出一个异常来实现.B ...

  3. AOP代理对象生成

    AOP(Aspect-OrientedProgramming,面向方面编程)是OOP(Object-Oriented Programing,面向对象编程)的良好补充与完善,后者侧重于解决 从上到下的存 ...

  4. java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总

    若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的. 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类. ...

  5. Java-马士兵设计模式学习笔记-代理模式-聚合与继承方式比较

    一.概述 1.目标:要在Tank的move()方法做时间代理及日志代理(可以设想以后还要增加很多代理处理),且代理间的顺序可活更换 2.思路: (1)聚合:代理类聚合了被代理类,且代理类及被代理类都实 ...

  6. aop代理方式引起的spring注入bean(实现类)与获取bean(实现类)出错

    描述: 现象一 :A 为 接口,AImpl 为 A 的实现类,且 AImpl 受 aop 扫描,且 aop 无特殊配置   此时若:Spring 中 注入 AImpl 类型的bean,获取一样     ...

  7. AOP之proceedingjoinpoint和joinpoint区别(获取各对象备忘)、动态代理机制及获取原理代理对象、获取Mybatis Mapper接口原始对象

    现在AOP的场景越来越多,所以我们有必要理解下和AOP相关的一些概念和机制. import org.aspectj.lang.reflect.SourceLocation; public interf ...

  8. 8 -- 深入使用Spring -- 4...6 AOP代理:基于注解的XML配置文件的管理方式

    8.4.6 基于XML配置文件的管理方式 Spring 2.x 提供一个新的aop:命名空间来定义切面.切入点和增强处理. XML配置方式优点: ⊙ 如果应用没有使用JDK 1.5 以上版本,那么应用 ...

  9. 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式

    8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...

随机推荐

  1. Python作用域

    以下依据Python 3 1.Python变量查找顺序为LEGB(L:Local,E:Enclosing,G:Global,B:Built-in). 2.实际上,在Python中,只有模块,类以及函数 ...

  2. 深入解析FileInputStream和FileOutputStream

    http://swiftlet.net/archives/1363 FileInputStream和FileOutputStream类属于字节类,可以操作任意类型的文件.在数据流的处理过程中,有两种情 ...

  3. CSS3边框

    border-radius box-shadow border-image border-radius可以创建圆形,如果一个元素是正方形,则设置border-radius为边长,则为圆形 box-sh ...

  4. android 5.0新特性学习--Drawable Tinting(为图片资源着色)

    使用android:tint属性去调整色调.android:tintMode 着色模式 screen multiply and src_atop/src_in/src_oversetTint(int ...

  5. sites

    search http://213.240.44.13/ http://1.179.252.95/

  6. The Accumulation of Capital

    The Accumulation of Capital ---- by *Adam Smith Capitals are increased by parsimony, and diminished ...

  7. Chapter 1 First Sight——24

    He looked away quickly, more quickly than I could, though in a flush of embarrassment I dropped my e ...

  8. hdu_3549_Flow Problem(最大流)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3549 题意:求1到n的最大流 题解:模版题,直接上Claris的ISAP,效率是一般dfs的十倍,OR ...

  9. CSS3线性渐变

    万恶的IE!!! <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. jq中的css-Dom

    1,height() ,width() 此方法用来获取匹配元素的高和宽的值,如果括号内有值,则是修改匹配元素的值, 2.offset() 此方法的作用是获取元素在当前视窗的相对偏移,其中返回的对象包含 ...