AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。也叫面向方面:Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。为啥吗要用AOP通俗的解释就是:好比高速公路的收费站,我相信不会有傻逼的人为每个车都建个收费站,一个收费站就够了,别管你是神马车,没有牌照统统滚蛋。这就是AOP的功能。他不属是与这个公路本身的一部分,而是我加上的,专门对于那些无照驾驶的。
下面我们来看看AOP在普通Java程序的实现:
public class UserDaoImp implements UserDao {
private User user;
public UserDaoImp(){}
public UserDaoImp(User user)
{
this.user=user;
}
public User getUser() {
return user;
}
public void delete(User user) {
System.out.println("delete....");
}
public void select(User user) {
// TODO Auto-generated method stub
System.out.println("select....");
}
public void update(User user) {
// TODO Auto-generated method stub
System.out.println("update....");
}
}
public class AopInterceptor implements InvocationHandler{
private Object targetObject;//目标对象
public Object createObjectProxy(Object targetObject)//创建代理对象
{
this.targetObject=targetObject;
//加载目标类,目标类实现的接口,切面类
return Proxy.newProxyInstance(this.targetObject.getClass().getClassLoader(), this.targetObject.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// 环绕advice
System.out.println("环绕advice.....");
UserDaoImp userDaoImp=(UserDaoImp)this.targetObject;
if(userDaoImp.getUser()!=null)
{
//返回目标类方法
try
{
//前置advice
System.out.println("前置advice.....");
return method.invoke(targetObject, args);
//后置advice
}
catch(Exception e)
{
//异常advice
System.out.println("异常advice.....");
}
finally
{
//最终advice
System.out.println("最终advice.....");
}
}
return null;
}
}