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

时间:2024-01-08 20:23:26

文件结构:

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);
}
}

结果:

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

②通过接口

接口:

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:代理实现方式①通过继承②通过接口