AOP切面编程

AOP术语。
    切面(Aspect)横切关注点(跨越应用程序多个模块的功能),被模块化的特殊对象
    通知(Adivice)切面必须要完成的工作
    代理(Proxy)向目标对象应用通知之后创建对象。
    连接点(joinpoint):程序执行的某个特定位置:如类某个方法调用前,调用后,方法抛出异常后等。连接点有两个
信息确定:方法标识的程序执行点,相对点表示方位。例如ArithmethicCalculator#add()方法执行前的位置
    切点(pointcut)每个类都拥有多个连接点:例如ArithmethicCalculator的所有方法实际上都是连接点,即连接点时成粗中客观的食物,
AOP通过切点定位到特定的连接点,即连接点时程序类中客观存在的食物,AOP通过切点定位到特定的连接点,类比:连接点相当于数据库中的记录
切点相当于查询条件,切点和连接点不是一对一关系,一个切点匹配多个连接点,切点通过org.springframework.aop.Pointcut接口尽心描述。它使用类和方法
作为连接点的查询条件。
在spring中启用AspectJ注解支持
    要在Spring应用中使用AspectJ必须在classpath下包含Aspect类库:aopalliance.jar aspectj.weaver.jar和spring-aspects.jar
    将AOPSchema添加到<beans>根元素中。
    要在Spring ioc容器中启用AspectJ注解支持,只要在Bean配置文件中定义一个空的xml元素<aop:aspectj-autoproxy>
    当Spring  IOC    容器侦测到Bean配置文件中的<aop:aspectj-autoproxy>元素时,会自动为与AspectJ切面匹配的Bean创建代理。
    
    使用步骤:
        加入jar包
            1)com.springsource.org.aopalliance-1.0.0.jar
            com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
            spring-aop-4.0.0.RELEASE.jar
            spring-aspects-4.0.0.RELASE.jar
            commons-logging-1.1.3.jar
            spring-beans-4.0.0.RELEASE.jar
            spring-context-4.0.0.RELEASE.jar
            spring-core-4.0.0.RELEASE.jar
            spring-expression-4.0.0.RELEASE.jar
            2)在配置文件中加入AOP命名空间
            
            
            3)基于注解方式
        
            ①配置文件中加入如下配置
                <!--使AsjectJ注释起作用:自动为 匹配的类生成代理对象-->
                前提要有<context:component-scan base-package="com.spring.test.aop.impl"></context:component-scan>
然后加入如下配置<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
            ②把横切关注点的代码抽象到切面类中。    
                i.切面首先是一个IOC中的bean.即加入@Component注释
                ii.切面还需要加入@Aspect注释
            ③.在类种声明各种通知
                AspectJ支持5中类型的通知注释
                    @Before:前置通知
                    @After:后置通知
                    @AfterRunning:返回通知,在方法返回结果后执行
                    @AfterThrowing:异常通知,在方法抛出异常之后
                    @Around:环绕通知,围绕着方法执行。
                具体步骤如下:
                    i.声明一个方法
                    ii.在方法前加入@Before注解。
                    例如:@Before("execution(public int  com.spring.test.aop.impl.AtithmeticCalculator.*(int ,int ))")
                    也可以换成下边范围更广的类型@Before("execution(* com.spring.test.aop.impl.*.*(int ,int ))")
上边这句说明可以返回任意类型的任何方法操作。作用范围更为广泛
            ④可以让通知访问当前连接点的细节
                    可以在通知方法中声明一个类型为JoinPoint的参数。然后就能范文链接细节,如方法名称和参数值。如下代码:
    @Before("execution(public int  com.spring.test.aop.impl.AtithmeticCalculator.*(int ,int ))")
    public void beforeMehtod(JoinPoint joint){
        String methodName=joint.getSignature().getName();//方法名称
        List<Object> args=Arrays.asList(joint.getArgs()); //传入方法中的参数
        System.out.println("the methodName:"+methodName+"   begin with"+args);
        System.out.println("the method begins");
    }
    
                
                
                
                
           
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值