AOP:静态代理实现方式①通过继承②通过接口
2017-01-16 15:43
447 查看
文件结构:
添加日志:
权限检查:
①:通过继承方式
基类:
Proxy1继承基类
Proxy2继承Proxy1
Proxy3这是继承的另一种方式:
测试类:
结果:
②通过接口
接口:
实现接口
Proxy1
Proxy2
测试类:
打印:
添加日志:
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); } }
打印:
相关文章推荐
- 多线程-静态代理的方式 - 实现Runnable接口
- 启动线程的五种方式方法(通过继承Thread类或实现Runnable接口)
- 静态代理之通过实现接口来实现代理
- JAVA 代理模式之通用接口/继承的实现方式
- 使用Emit实现代理方式AOP框架
- 采用静态配置文件方式实现AOP
- 以继承的硬编码方式实现的代理
- Spring的AOP(四):自动代理及Aspect J的方式实现Aop编程
- 动态代理方式实现AOP (emit)
- 通过代理接口在内存中动态生成代理类源代码并编译实现的真正动态代理
- Java【多线程知识总结(5)】比较继承Thread类创建线程和实现Runnable接口创建线程这两种方式
- 通过反射,将datatable转换为List集合(反射读取实体类的属性,并赋值),通过接口来实现MySql和MsSql数据的切换(二层反射),静态构造函数,抽象类和接口的区别
- Spring通过@AspectJ方式实现AOP
- Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?
- C#中实现多继承的方式:混合+接口
- spring实现AOP的两种方式以及实现动态代理方式
- Spring 通过Spring AOP 方式来实现AOP
- 改进C#代码之22:通过定义并实现接口替代继承
- Spring---->采用静态配置文件方式实现AOP
- Aop实现接口方式