您的位置:首页 > 编程语言 > Java开发

Spring:AOP(二)编程方式实现AOP

2015-12-08 15:29 531 查看
public interface UserService {

void queryUsers();

void saveUser();

void deleteUser();

}

public class UserServiceImpl implements UserService {

@Override

public void deleteUser() {

System.out.println(">> 删除一个User <<");

}

@Override

public void queryUsers() {

System.out.println(">> 查询所有User <<");

}

@Override

public void saveUser() {

System.out.println(">> 保存一个User <<");

}

}

public class LogAdvice implements MethodInterceptor {

@Override

public Object invoke(MethodInvocation methodInvocation) throws Throwable {

System.out.println("== 开始执行操作 ==");

Object result = methodInvocation.proceed(); // 执行原方法

System.out.println("== 操作执行完毕 ==");

return result;

}

}

// 使用编程的方式实现AOP

@Test

public void test() throws Exception {

UserService userService = new UserServiceImpl();

// ===================================================

// 1,声明“切入点”,表示要拦截哪些方法

NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut();

pointcut.addMethodName("save*");

pointcut.addMethodName("delete*");

// 2,声明一个“通知”,表示拦截到之后要做什么事

LogAdvice logAdvice = new LogAdvice();

// 3,组装为一个切面(切面=切入点+通知)

Advisor advisor = new DefaultPointcutAdvisor(pointcut, logAdvice);

// 4,为原对象生成一个代理对象

ProxyFactory proxyFactory = new ProxyFactory();

proxyFactory.addAdvisor(advisor); // 添加一个切面

proxyFactory.setTarget(userService); // 指定目标对象

userService = (UserService) proxyFactory.getProxy(); // 获取代理对象

// ===================================================

// 使用的是代理对象

userService.saveUser();

System.out.println();

userService.deleteUser();

System.out.println();

userService.queryUsers();

System.out.println();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: