AOP(Aspect Oriented Programming)面向切面编程,aop解决的问题是什么(AOP模拟)

它是面向对象思维方式的有力补充

应用:

Filter:在处理jsp页面传输中文的解决过程中,我们可以引人一个filter,让所有的requestresponse都通过filter过滤。

Strutsinterceptor:它的实现就体现了aop思想。正常情况下,直接就执行action,而加入拦截器后,可以在action前后都加上一些逻辑,同时也不破坏原来的ation的执行。当不需要这些功能时,就可以把拦截器撤了。

AOP需要解决的问题是:在一个类的某个方法前面加上新的业务逻辑。有如下方法:

在原来类的方法上添加新的业务逻辑。

继承。重写对应的方法。耦合性太强

组合。实现接口,耦合性降低

动态代理。

 

Spring AOP的配置与应用:权限检查,日志,审查,效率检测,事务,异常管理。SpringAOP的实现,使用的是jdk的动态代理,同时spring还可以修改二进制码直接实现。

AOP的模拟实现(在serviceadd方法上加上日志,这儿用到了jdkInvocationHandlerproxy

//实现InvocationHandler接口

LogInterceptor.java

package com.xie.spring.aop;

 

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

 

import com.xie.spring.dao.UserDAO;

 

public class LogInterceptor implements InvocationHandler{

    private Object target;

   

   

    public Object getTarget() {

       return target;

    }

 

    public void setTarget(Object target) {

       this.target = target;

    }

 

    public void beforMethod(Method m){

      

       System.out.println(m.getName()+" started");

    }

 

    public void afterMethod(Method m){

       System.out.println(m.getName()+" success");

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args)

           throws Throwable {

       beforMethod(method);

       method.invoke(target, args);

       afterMethod(method);

       return null;

    } 

}

//测试方法:

 

@Test

    public void testProxy(){

       UserDAO userDao=new UserDAOImpl();

       LogInterceptor log=new LogInterceptor();

       log.setTarget(userDao);

      

       UserDAO userDaoProxy=(UserDAO) Proxy.newProxyInstance(userDao.getClass().getClassLoader(), new Class[]{UserDAO.class}, log);

       System.out.println(userDaoProxy.getClass());

       userDaoProxy.save(new User());

       userDaoProxy.delete(new User());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值