SpringAOP编程实例
2017-07-28 12:19
549 查看
package test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 抽象主题角色:声明了真实主题和代理主题的共同接口。
*
* @author yanbin
*
*/
interface ITalk {
public void talk(String msg);
}
/**
* 真实主题角色:官网:www.fhadmin.org 定义真实的对象。
*
* @author yanbin
*
*/
class PeopleTalk implements ITalk {
public String username;
public String age;
public PeopleTalk(String username, String age) {
this.username = username;
this.age = age;
}
public void talk(String msg) {
System.out.println(msg + "!你好,我是" + username + ",我年龄是" + age);
}
public String getName() {
return username;
}
public void setName(String name) {
this.username = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
/**
* 动态代理类
*/
class DynamicProxy implements InvocationHandler {
/** 需要代理的目标类 */
private Object target;
/**
* 写法固定,aop专用:绑定委托对象并返回一个代理类
*
* @param delegate
* @return
*/
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* @param Object
* target:指被代理的对象。
* @param Method
* method:要调用的方法
* @param Object
* [] args:方法调用时所需要的参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
// 切面之前执行
System.out.println("切面之前执行");
// 执行业务
result = method.invoke(target, args);
// 切面之后执行
System.out.println("切面之后执行");
return result;
}
}
/**
* 测试类
*
* @author yanbin
*
*/
public class SpringAOP {
public static void main(String[] args) {
// 绑定代理,这种方式会在所有的方法都加上切面方法
ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk("xiaonan","23"));
iTalk.talk("业务说明");
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 抽象主题角色:声明了真实主题和代理主题的共同接口。
*
* @author yanbin
*
*/
interface ITalk {
public void talk(String msg);
}
/**
* 真实主题角色:官网:www.fhadmin.org 定义真实的对象。
*
* @author yanbin
*
*/
class PeopleTalk implements ITalk {
public String username;
public String age;
public PeopleTalk(String username, String age) {
this.username = username;
this.age = age;
}
public void talk(String msg) {
System.out.println(msg + "!你好,我是" + username + ",我年龄是" + age);
}
public String getName() {
return username;
}
public void setName(String name) {
this.username = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
/**
* 动态代理类
*/
class DynamicProxy implements InvocationHandler {
/** 需要代理的目标类 */
private Object target;
/**
* 写法固定,aop专用:绑定委托对象并返回一个代理类
*
* @param delegate
* @return
*/
public Object bind(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
/**
* @param Object
* target:指被代理的对象。
* @param Method
* method:要调用的方法
* @param Object
* [] args:方法调用时所需要的参数
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
// 切面之前执行
System.out.println("切面之前执行");
// 执行业务
result = method.invoke(target, args);
// 切面之后执行
System.out.println("切面之后执行");
return result;
}
}
/**
* 测试类
*
* @author yanbin
*
*/
public class SpringAOP {
public static void main(String[] args) {
// 绑定代理,这种方式会在所有的方法都加上切面方法
ITalk iTalk = (ITalk) new DynamicProxy().bind(new PeopleTalk("xiaonan","23"));
iTalk.talk("业务说明");
}
}
相关文章推荐
- spring aop 2.0 编程(二)一个实例
- Spring AOP编程实例
- spring aop切面编程基础实例
- spring aop 2.0 编程(二)一个实例
- Spring 面向切面编程AOP
- 简单模拟Spring AOP功能 (1) AOP编程思想的理解
- Spring容器的AOP编程
- Spring AOP: Spring之面向方面编程
- JavaEE开发之Spring中的依赖注入与AOP编程
- Spring 面向切面(AOP)编程,注解
- Java框架spring 学习笔记(十二):aop实例操作
- 使用Spring的注解方式实现AOP实例
- Spring面向切面编程AOP
- Spring AOP编程问题:下面代码哪里错了?可以考验对Spring AOP的实现机制是否了解的
- 跟开振学习Spring AOP第一篇:开启约定编程之路
- Spring Aop实例
- Spring AOP原理浅析及入门实例
- Spring核心机制(面向切面编程AOP)
- SSH框架之Spring的aop编程、手动实现aop编程
- spring学习笔记(19)mysql读写分离后端AOP控制实例