Java 反射 动态代理 切面编程
2017-12-11 17:40
411 查看
-实现类
package com.proxy.impl;
import com.proxy.Salary;
public class SalaryImpl implements Salary {
@Override
public void doSalary(Integer num,Integer num2) {
System.out.println("computing ............"+num+"------"+num2);
}
}
package com.proxy.impl;
import com.proxy.Tips;
public class TipsImpl implements Tips {
@Override
public void before() {
System.out.println("tips before.......");
}
@Override
public void after() {
System.out.println("tips after.......");
}
}
--接口类
package com.proxy;
public interface Tips {
public void before();
public void after();
}
package com.proxy;
public interface Salary {
public void doSalary(Integer num,Integer num2);
}
--代理类
package com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SimpleProxy implements InvocationHandler {
private Tips tips;
private Object obj;
// 绑定代理对象
public Object bind(Tips tips, Object obj) {
this.tips = tips;
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
// 实现代理
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
tips.before();
result = method.invoke(obj, args);
tips.after();
return null;
}
}
--调用类 new TipsImpl()依据需要可以改变
package com.proxy;
import com.proxy.impl.SalaryImpl;
import com.proxy.impl.TipsImpl;
public class Client {
public static void main(String[] args) {
SimpleProxy proxy = new SimpleProxy();
Salary salary = (Salary)proxy.bind(new TipsImpl(), new SalaryImpl());
salary.doSalary(11,12);
}
}
package com.proxy.impl;
import com.proxy.Salary;
public class SalaryImpl implements Salary {
@Override
public void doSalary(Integer num,Integer num2) {
System.out.println("computing ............"+num+"------"+num2);
}
}
package com.proxy.impl;
import com.proxy.Tips;
public class TipsImpl implements Tips {
@Override
public void before() {
System.out.println("tips before.......");
}
@Override
public void after() {
System.out.println("tips after.......");
}
}
--接口类
package com.proxy;
public interface Tips {
public void before();
public void after();
}
package com.proxy;
public interface Salary {
public void doSalary(Integer num,Integer num2);
}
--代理类
package com.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class SimpleProxy implements InvocationHandler {
private Tips tips;
private Object obj;
// 绑定代理对象
public Object bind(Tips tips, Object obj) {
this.tips = tips;
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
// 实现代理
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
tips.before();
result = method.invoke(obj, args);
tips.after();
return null;
}
}
--调用类 new TipsImpl()依据需要可以改变
package com.proxy;
import com.proxy.impl.SalaryImpl;
import com.proxy.impl.TipsImpl;
public class Client {
public static void main(String[] args) {
SimpleProxy proxy = new SimpleProxy();
Salary salary = (Salary)proxy.bind(new TipsImpl(), new SalaryImpl());
salary.doSalary(11,12);
}
}
相关文章推荐
- 反射结合动态代理实现切面编程
- Java动态代理之JDK动态代理和CGLib动态代理 面向切面编程AOP原理
- JAVA_动态代理AOP切面编程
- spring_由XML实现AOP面向切面编程_实现动态代理
- Java反射和动态代理详解和实例
- java反射与动态代理
- java反射中的动态代理机制(有实例)
- Java编程之动态代理
- JAVA AOP编程之动态代理技术
- 关于java的反射机制及动态代理
- Java中的动态代理及反射机制
- Java中的反射与动态代理
- JavaSE(10):Java反射技术及动态代理
- 0025 Java 动态代理(反射的应用)【基础】
- Java深度历险(七)——Java反射与动态代理
- java学习之路 之 反射机制综合练习题、动态代理实例
- Java基础 - 类的加载,类加载器,反射,动态代理,模板设计模式,JDK5新特性,枚举(类),JDK1.7新特性
- JAVA AOP编程之动态代理技术
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- JAVA的反射机制和动态代理