码迷,mamicode.com
首页 > 编程语言 > 详细

Spring框架中的aop

时间:2015-04-05 09:05:36      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:spring aop 代理 javaee

1.建立了日志类

package cn.edu.proxy.cglibproxy;

public class Logger {

	
	public void logging() {
		// TODO Auto-generated method stub
		System.out.println("logging");
	}
	
}

2.建立安全类

package cn.edu.proxy.cglibproxy;

public class Security  {

	
	public void security() {
		// TODO Auto-generated method stub
		System.out.println("security");
	}
	
	
}
3.建立权限类

package cn.edu.proxy.cglibproxy;

public class Privilege {
	private String access;

	public String getAccess() {
		return access;
	}

	public void setAccess(String access) {
		this.access = access;
	}
	

}
4.建立薪水管理接口

package cn.edu.proxy.cglibproxy;

public interface SalaryManager {
	public void showSalary();
	
}

5.建立薪水管理类的实现

package cn.edu.proxy.cglibproxy;

public class SalaryManagerImpl implements SalaryManager {

	@Override
	public void showSalary() {
		// TODO Auto-generated method stub
		System.out.println("查看工资");
	}
	

}
6.建立拦截器类,并且把其他的类以构造函数的形式导入,此类实现了InvocationHandler接口,其中Object是目标类

如果满足access为admin就执行方法,否则就输出没有权限

package cn.edu.proxy.cglibproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class SalaryInterceptor implements InvocationHandler{
	private Object target;
	private Logger logger;
	private Security security;
	private Privilege privilege;
	
	public SalaryInterceptor(Object target, Logger logger, Security security,
			Privilege privilege) {
		super();
		this.target= target;
		this.logger = logger;
		this.security = security;
		this.privilege = privilege;
	}


	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		// TODO Auto-generated method stub
		if(this.privilege.getAccess().equals("admin")){
			this.logger.logging();
			this.security.security();
			method.invoke(this.target, args);
		}else{
			System.out.println("对不起,您没有权限");
		}
		return null;
	}

}

7.建立测试类,建立日志类,安全类,以及权限类的实例,并且建立拦截器类。

使用代理的方法newProxyInstance()返回薪水管理类(这是目标类)

package cn.edu.proxy.cglibproxy;

import java.lang.reflect.Proxy;

import org.junit.Test;

public class SalaryTest {
	@Test
	public void test(){
		Object target=new SalaryManagerImpl();//目标类
		Logger logger=new Logger();
		Privilege privilege=new Privilege();
		privilege.setAccess("admin");
		Security security=new Security();
		SalaryInterceptor interceptor=new SalaryInterceptor(target, logger, security, privilege);
		 SalaryManager salaryManager=(SalaryManager)Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), interceptor);
		salaryManager.showSalary();
	}
}

总结:

aop:

1.切面

日志,安全类框架,权限等都是切面

2.通知

切面中的方法就是通知

3.目标类

4.切入点

5.织入

形成代理对象的方法的过程
好处:

日志,安全性框架,权限,目标方法之间完全是松耦合的




Spring框架中的aop

标签:spring aop 代理 javaee

原文地址:http://blog.csdn.net/u014010769/article/details/44877165

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!