zoukankan      html  css  js  c++  java
  • Spring框架总结(十)

    XML方式实现AOP编程

    Xml实现aop编程:
    1) 引入jar文件 【aop 相关jar, 4个】
    2) 引入aop名称空间
    3)aop 配置
    * 配置切面类 (重复执行代码形成的类)
    * aop配置 拦截哪些方法 / 拦截到方法后应用通知代码

    把下边中的类的所有注释去掉

    Spring框架总结(九) - 北极的大企鹅 - 博客园 http://www.cnblogs.com/liuyangfirst/p/6556121.html

    更改bean.xml

     1   <?xml version="1.0" encoding="UTF-8"?>
     2   <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:aop="http://www.springframework.org/schema/aop"
     6     xsi:schemaLocation="
     7         http://www.springframework.org/schema/beans
     8         http://www.springframework.org/schema/beans/spring-beans.xsd
     9         http://www.springframework.org/schema/context
    10         http://www.springframework.org/schema/context/spring-context.xsd
    11         http://www.springframework.org/schema/aop
    12         http://www.springframework.org/schema/aop/spring-aop.xsd">
    13 
    14     <!-- dao 实例 -->
    15     <bean id="myUserDaoAop" class="com.liuyang.xml.proxy.MyUserDaoAop"></bean>
    16     <bean id="orderDao" class="com.liuyang.xml.proxy.OrderDao"></bean>
    17 
    18     <!-- 切面类 -->
    19     <bean id="aop" class="com.liuyang.xml.proxy.Aop"></bean>
    20 
    21     <!-- Aop配置 -->
    22     <aop:config>
    23         <!-- 定义一个切入点表达式: 拦截哪些方法 -->
    24         <aop:pointcut expression="execution(* com.liuyang.xml.proxy.*.*(..))"
    25             id="pt" />
    26         <!-- 切面 -->
    27         <aop:aspect ref="aop">
    28             <!-- 环绕通知 -->
    29             <aop:around method="around" pointcut-ref="pt" />
    30             <!-- 前置通知: 在目标方法调用前执行 -->
    31             <aop:before method="begin" pointcut-ref="pt" />
    32             <!-- 后置通知: -->
    33             <aop:after method="after" pointcut-ref="pt" />
    34             <!-- 返回后通知 -->
    35             <aop:after-returning method="afterReturning"
    36                 pointcut-ref="pt" />
    37             <!-- 异常通知 -->
    38             <aop:after-throwing method="afterThrowing"
    39                 pointcut-ref="pt" />
    40 
    41         </aop:aspect>
    42     </aop:config>
    43 </beans>      

    更改test

     1     public class TestAop {
     2 
     3     ApplicationContext ac = new ClassPathXmlApplicationContext(
     4             "com/liuyang/xml/proxy/bean.xml");
     5 
     6     // 目标对象有实现接口,spring会自动选择“JDK代理”
     7     @Test
     8     public void testApp() {
     9         UserDao userDao = (UserDao) ac.getBean("myUserDaoAop");
    10         System.out.println(userDao.getClass());// $Proxy001
    11         userDao.save();
    12     }
    13 
    14     // 目标对象没有实现接口, spring会用“cglib代理”
    15     @Test
    16     public void testCglib() {
    17         OrderDao orderDao = (OrderDao) ac.getBean("orderDao");
    18         System.out.println(orderDao.getClass());
    19         orderDao.save();
    20     }
    21 }
  • 相关阅读:
    Kubernetes Declarative Deployment
    Kubernetes集群如何查看scheduler/controller manager谁是leader
    kubelet 配置管理 (一)
    Kubernetes Ingress
    如何计算Kubernetes容器CPU使用率
    Kubernetes概念
    .NET陷阱之四:事件监听带来的问题与弱监听器
    .NET陷阱之三:“正确”使用控件也会造成内存泄露
    .NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
    自己编译得到 arm64v8a 版本的libZBarDecoder.SO文件
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/6556347.html
Copyright © 2011-2022 走看看