spring03 AOP、各种通知、一/多个切面例子

本文详细介绍了Spring AOP的概念和组件,包括切面、通知、目标类和切入点。通过实例展示了前置通知、后置通知、最终通知、异常通知和环绕通知的使用方法,并提供了创建代理对象的条件。此外,还通过具体代码展示了单一和多个切面的配置及执行流程。最后,提到了Spring AOP的注解形式,简化了配置过程。
摘要由CSDN通过智能技术生成




一、 springAOP


       1、作用: 使得事务、日志、安全性框架、权限、目标方法之间完全是松耦合的
       
       2、组成
              1、切面:   事务、日志、安全性框架、权限等都是切面
              2、通知:   切面中的方法就是通知
              3、目标类 
              4、切入点   只有符合切入点,才能让通知和目标方法结合在一起
              5、织入:   形成代理对象的方法的过程
              注:代理对象的方法就是通知和目标方法的结合体
              
       3、相对于动态代理,省略了写拦截器的过程
       
       4、切入点表达式详解
       
              
        
        
       5、springAOP的具体加载步骤:
             1、当spring容器启动的时候,加载了spring的配置文件
             2、为配置文件中所有的bean创建对象
             3、spring容器会解析aop:config的配置 
                   解析切入点表达式,用切入点表达式和纳入spring容器中的bean做匹配
                      如果匹配成功,则会为该bean创建代理对象,代理对象的方法=目标方法+通知
                      如果匹配不成功,不会创建代理对象
             4、在客户端利用context.getBean获取对象时,如果该对象有代理对象则返回代理对象,
                      如果无代理对象,则返回目标对象


             5、如果目标类没有实现接口,则spring容器会采用cglib的方式产生代理对象,
                      如果实现了接口,会采用jdk的方式
       
              
       6、各种通知详解
             1、前置通知
                  1、在目标方法执行之前执行
                  2、无论目标方法是否抛出异常,都执行,因为在执行前置通知的时候,目标方法还没有执行,还没有遇到异常
                  例:  
                      ------------------------------------------------------------------------------
                      <aop:before method="beginTransaction" pointcut-ref="perform"/>
                      
                      // 前置通知
                      public void beginTransaction(){
                          System.out.println("before inform");
                          this.transaction = sessionFactory.getCurrentSession().beginTransaction();      
                      }
                      ------------------------------------------------------------------------------
                  
                  
             2、后置通知
                  1、在目标方法执行之后执行
                  2、当目标方法遇到异常,后置通知将不再执行
                  3、后置通知可以接受目标方法的返回值,但是必须注意:
                      后置通知的参数的类型为Object,且名称和配置文件中returning="var"的值是一致的
                  例:
                      ------------------------------------------------------------------------------
                      不带参数的
                          <aop:after-returning method="commit" pointcut-ref="perform" />
                          
                          // 后置通知
                          public void commit(){
                              System.out.println("after return inform");
                              this.transaction.commit();
                          }
                          
                          // 不带返回值的目标方法
                          public void savePerson(Person person) {
                              sessionFactory.getCurrentSession().save(person);
                          }
                        
                        
                      带参数的
                          <aop:after-returning method="commit" pointcut-ref="perform" returning="var"/>
                          
                          public void commit(Object var){
                              System.out.println("after return inform");
                              System.out.println(var);
                              this.transaction.commit();
                          }
                          
                          // 带返回值的目标方法
                          public String savePerson(Person person) {
                            //int i = 1/0;
                              System.out.println("目标方法");
                              return "返回值";
                          }
                      ------------------------------------------------------------------------------
                        
                           
             3、最终通知:
                  1、在目标方法执行之后执行
                  2、无论目标方法是否抛出异常,都执行,因为相当于finally
                  例:
                      ------------------------------------------------------------------------------
                        <aop:after method="fianllyMethod" pointcut-ref="perform"/>
                        
                        public void fianllyMethod(){
                            System.out.println("finally inform");
                        }
                      ------------------------------------------------------------------------------
                  
                  
             4、异常通知 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值