文件结构:

添加日志:

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. Vs2010 WPF 项目打包

    [转]图解WPF程序打包全过程 首先打开已经完成的工程,如图: 下面开始制作安装程序包. 第一步:[文件]——[新建]——[项目]——安装项目. 名称——可以自己根据要求修改. 位置——是指你要制作的 ...

  2. Css 之 px em %

    在页面整体布局中,页面元素的尺寸大小(长度.宽度.内外边距等)和页面字体的大小也是重要的工作之一.一个合理设置,则会让页面看起来层次分明,重点鲜明,赏心悦目.反之,一个不友好的页面尺寸和字体大小设置, ...

  3. PostConstruct注解

    应用场景:当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时 public class UserDaoImpl extends HibernateDao ...

  4. Photos FrameWork 续

    1. Model PHAsset .PHAssetCollection.PHCollectionList 是Photos框架中的模型类,PHAsset类模型是图片或者视频文件数据:PHAssetCol ...

  5. 当使用System,out.println()打印一个对象是自动调用toString方法

    在Java中,所有的对象都是继承自Object,自然继承了toString方法,在当使用System,out.println()里面为一个对象的引用时,自动调用toString方法讲对象打印出来.如果 ...

  6. 转:HTML错误编号大全

    HTML错误编号大全 状态行包含HTTP版本.状态代码.与状态代码对应的简短说明信息.在大多数情况下,除了Content-Type之外的所有应答头都是可选的.但Content-Type是必需的,它描述 ...

  7. Linux中防火墙centos

    一般的防火墙用下面这些简单的配置都能达到目的 1) 重启后生效 开启: chkconfig iptables on 关闭: chkconfig iptables off 2) 即时生效,重启后失效 开 ...

  8. PHP中将ip地址转成十进制数的两种实用方法

    As we all know that long2ip works as ip1.ip2.ip3.ip4 (123.131.231.212) long ip => (ip1 * 256 * 25 ...

  9. O(n)线性时间找第K大,中位数

    运用快速排序的思想,可以达到线性时间找到一串数的第K大 #include<cstdio> #define F(i,a,b) for(int i=a;i<=b;i++) ],n; vo ...

  10. linux export将PATH环境变量误删了的解决办法

    今天新增环境变量的时候不小心把冒号错打成了分号 export PATH=/usr/local/php5/bin;$PATH; 导致PATH变量为/usr/local/php/bin 解决办法:[ubu ...