zoukankan      html  css  js  c++  java
  • spring aop编程

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
                                  http://www.springframework.org/schema/beans/spring-beans.xsd
                                  http://www.springframework.org/schema/aop 
                                  http://www.springframework.org/schema/aop/spring-aop.xsd">
        <!-- 1 创建目标类 -->
        <bean id="userServiceId" class="com.itheima.c_spring_aop.UserServiceImpl"></bean>
        <!-- 2 创建切面类(通知) -->
        <bean id="myAspectId" class="com.itheima.c_spring_aop.MyAspect"></bean>
        <!-- 3 aop编程 
            3.1 导入命名空间
            3.2 使用 <aop:config>进行配置
                    proxy-target-class="true" 声明时使用cglib代理
                <aop:pointcut> 切入点 ,从目标对象获得具体方法
                <aop:advisor> 特殊的切面,只有一个通知 和 一个切入点
                    advice-ref 通知引用
                    pointcut-ref 切入点引用
            3.3 切入点表达式
                execution(* com.itheima.c_spring_aop.*.*(..))
                选择方法         返回值任意   包                                             类名任意   方法名任意   参数任意
            
        -->
        <aop:config proxy-target-class="true">
            <aop:pointcut expression="execution(* com.itheima.c_spring_aop.*.*(..))" id="myPointCut"/>
            <aop:advisor advice-ref="myAspectId" pointcut-ref="myPointCut"/>
        </aop:config>
    </beans>

     Service

    package com.itheima.c_spring_aop;
    
    public interface UserService {
        
        public void addUser();
        public void updateUser();
        public void deleteUser();
    
    }
    UserServiceImpl
    package com.itheima.c_spring_aop;
    
    public class UserServiceImpl implements UserService {
    
        @Override
        public void addUser() {
            System.out.println("c_spring_aop addUser");
        }
    
        @Override
        public void updateUser() {
            System.out.println("c_spring_aop updateUser");
    
        }
    
        @Override
        public void deleteUser() {
    
            System.out.println("c_spring_aop deleteUser");
        }
    
    }
    MyAspect
    package com.itheima.c_spring_aop;
    
    import org.aopalliance.intercept.MethodInterceptor;
    import org.aopalliance.intercept.MethodInvocation;
    
    /**
     * 切面类中确定通知,需要实现不同接口,接口就是规范,从而就确定方法名称。
     * * 采用“环绕通知” MethodInterceptor
     *
     */
    public class MyAspect implements MethodInterceptor {
    
        @Override
        public Object invoke(MethodInvocation mi) throws Throwable {
            
            System.out.println("前4");
            
            //手动执行目标方法
            Object obj = mi.proceed();
            
            System.out.println("后4");
            return obj;
        }
    }
    package com.itheima.c_spring_aop;
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestSpringAOP {
        
        @Test
        public void demo01(){
            String xmlPath = "com/itheima/c_spring_aop/beans.xml";
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
            
            //获得目标类
            UserService userService = (UserService) applicationContext.getBean("userServiceId");
            userService.addUser();
            userService.updateUser();
            userService.deleteUser();
        }
    
    }

  • 相关阅读:
    关于分布式事务、两阶段提交协议、三阶提交协议
    关于分布式一致性的探究
    初始分布式系统
    移动端禁止video在ios系统中自动全屏播放
    ios对new Date() 的兼容问题
    VUE路由懒加载的方式
    记录 好看的阴影
    创建码云仓库,并将本地代码上传至仓库
    v-cloak遇到的问题及解决方法
    CSS 定义一条渐变优雅的分割线
  • 原文地址:https://www.cnblogs.com/hudj/p/7060299.html
Copyright © 2011-2022 走看看