zoukankan      html  css  js  c++  java
  • spring日记(三)

    一、使用注解方式完成AOP

      1.加入jar文件(aspects不用加)

       2.创建一个切面类

    @Aspect
    @Component
    public class LogAspect {
        /*。第一个*匹配的是通用访问修饰符
        。第二个 * 匹配的是所有方法
        。  .. 匹配所有参数
        也可执行实现类中的方法  * com.zhiyou100.cyf.aspect.PeopleInt.*(..)
        */
        @Before(value="execution(* com.zhiyou100.cyf.aspect.People.*(..))")
        public void before(JoinPoint joinPoint) {
            String name=joinPoint.getSignature().getName();
            System.out.println("执行"+name+"方法");
        }
        @After(value="execution(* com.zhiyou100.cyf.aspect.LogAspect.*(..))")
        public void after(JoinPoint joinPoint) {
            String name=joinPoint.getSignature().getName();
            System.out.println("方法"+name+"结束");
        }
    }

      3.在配置文件中开启注解

    <context:component-scan base-package="com.zhiyou100.cyf.aspect"></context:component-scan>
        <!-- 开启切面注解 -->
        <aop:aspectj-autoproxy></aop:aspectj-autoproxy>

      4.测试。(需要加入切面的类必须拥有接口,这里只能用接口声明?)

    public class Test {
        public static void main(String[] args) {
            ApplicationContext app=new ClassPathXmlApplicationContext("app.xml");
            //。这里只能用接口声明
            PeopleInt p=(PeopleInt) app.getBean("people");
            p.show();
        }
    }

    before和after注解分别表示方法调用前调用此方法,方法调用结束,但尚未返回时调用此方法。

    AfterReturning注解可获得返回值

    AfterThrowing注解捕获异常

    @AfterReturning(value="execution(* com.zhiyou100.cyf.aspect.LogAspect.*(..))",returning="result")//returning必须与参数名相同
        public void returning(Object result) {
            System.out.println("返回值为"+result);
        }
        @AfterThrowing(value="execution(* com.zhiyou100.cyf.aspect.LogAspect.*(..))",throwing="e")
        public void exception(Exception e) {
            System.out.println("发生异常"+e.getMessage());
        }

    二、使用xml方式完成AOP

    <!-- 。定义被通知的程序类 -->
        <bean id="peopleImp" class="com.zhiyou100.cyf.aop.PeopleImp"></bean>
        <!-- 。定义切面类 -->
        <bean id="logAspect" class="com.zhiyou100.cyf.aop.LogAspect"></bean>
        <!--。 配置切面 -->
        <aop:config>
            <!-- 。定义表达式切点 -->
            <aop:pointcut expression="execution(* com.zhiyou100.cyf.aop.PeopleImp.*(..))" id="pointcut"/>
            <!-- 。定义切面 -->
            <aop:aspect ref="logAspect">
             <!--。 定义前置通知 -->
                <aop:before method="before" pointcut-ref="pointcut"/>
                <aop:after method="after" pointcut-ref="pointcut"/>
                <aop:after-returning method="returning" pointcut-ref="pointcut" returning="result"/>
                <aop:after-throwing method="exception" pointcut-ref="pointcut" throwing="e"/>
            </aop:aspect>
        </aop:config>
  • 相关阅读:
    SpringBoot详解(二)——
    SpringBoot详解(一)——
    数据库三大范式
    Mysql备份
    mysql索引
    mysql事务
    几种数据库查找的案例
    点击加载更多
    layer、弹出框
    验证码倒计时
  • 原文地址:https://www.cnblogs.com/psxfd4/p/11482140.html
Copyright © 2011-2022 走看看