zoukankan      html  css  js  c++  java
  • JAVA框架 Spring AOP注解

    一、准备工作:

    1)导入jar包:

    4个jar包。

    2)约束:(spring需要所有的约束)有IOC约束和AOP 还有事务(tx)以及注解注入的约束(context)。

     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"
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xmlns:aop="http://www.springframework.org/schema/aop"
     6     xmlns:tx="http://www.springframework.org/schema/tx"
     7     xsi:schemaLocation="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     http://www.springframework.org/schema/tx 
    14     http://www.springframework.org/schema/tx/spring-tx.xsd">
    15     
    16 </beans>

     3)代码:

    1、接口

    1 package jd.com.asp;
    2 
    3 public interface asp {
    4     void save();
    5     void update();
    6 }

     2、实现类:

     1 package jd.com.asp;
     2 
     3 
     4 import org.springframework.stereotype.Component;
     5 
     6 @Component(value = "aspImpl")//注入该类。
     7 public class aspImpl implements  asp {
     8     @Override
     9     public void save() {
    10         System.out.println("this save method");
    11     }
    12 
    13     @Override
    14     public void update() {
    15         System.out.println("this update method !");
    16     }
    17 }

     3、切面类:

     1 package jd.com.asp;
     2 
     3 
     4 import org.aspectj.lang.annotation.Aspect;
     5 import org.aspectj.lang.annotation.Before;
     6 import org.aspectj.lang.annotation.Pointcut;
     7 import org.springframework.stereotype.Component;
     8 
     9 
    10 @Component(value = "aspj")//注入切面类。
    11 @Aspect//声明该类为切面类。
    12 public class aspj {
    13 
    14 
    15     @Before(value = "execution(public  void  jd.com.asp.aspImpl.save(..))" )//通知类型和切入点。
    16     public  void  log(){
    17         System.out.println("log print!");
    18     }
    19 }

      需要注明该类为切面类。

      需要注明方法的通知类型和切入点表达式。

    4、配置文件配置:

    1     <!--开启自动扫描组件-->
    2     <context:component-scan base-package="jd.com" />
    3     <!--打开自动代理开关-->
    4     <aop:aspectj-autoproxy />

    入门例子完成。

     通知类型:

     1 package jd.com.asp;
     2 
     3 
     4 import org.aspectj.lang.ProceedingJoinPoint;
     5 import org.aspectj.lang.annotation.*;
     6 import org.springframework.stereotype.Component;
     7 
     8 
     9 @Component(value = "aspj")//注入切面类。
    10 @Aspect//声明该类为切面类。
    11 public class aspj {
    12 
    13 
    14     @Before(value = "execution(public  void  jd.com.asp.aspImpl.save(..))" )//通知类型和切入点。
    15     public  void  log(){
    16         System.out.println("log print!");
    17     }
    18 
    19 
    20     //切入点调用方法:类的名字.方法名字()
    21     @After(value = "aspj.fn()")
    22     public  void  after(){
    23         System.out.println("最终的方法!");
    24     }
    25 
    26     @AfterReturning(value = "aspj.fn()")
    27     public  void  afterreturning(){
    28         System.out.println("后置方法");
    29 
    30     }
    31 
    32 
    33     @Around(value = "aspj.fn()")
    34     public void  round(ProceedingJoinPoint proceedingJoinPoint){
    35         System.out.println("环绕方法执行1");
    36         try {
    37             proceedingJoinPoint.proceed();
    38         } catch (Throwable throwable) {
    39             throwable.printStackTrace();
    40         }
    41         System.out.println("环绕方法执行2");
    42     }
    43 
    44 
    45 
    46     //切入点定义  方法的body需要是空的。
    47     @Pointcut(value = "execution(public  void  jd.com.asp.aspImpl.save(..))")
    48     public void  fn(){}
    49 }

    其中可以定义切入点:

    1)需要定义一个body是空的方法。

    2)需要pointcut注解  后面跟切入点表达式。

    3)调用的时候需要value=当前切面类的类名字.切入点定义的方法名字()

    1     //切入点定义  方法的body需要是空的。
    2     @Pointcut(value = "execution(public  void  jd.com.asp.aspImpl.save(..))")
    3     public void  fn(){}
  • 相关阅读:
    Kubernetes 集群日志管理
    登录功能通用测试用例设计
    Linux常用命令大全
    查看Android应用包名、Activity的几个方法
    CentOS 7 下Docker的安装
    Centos7.1下Docker的安装-yum方法
    appium+Java+testng自动化框架搭建-第一季
    Android在Win10环境搭建
    List<Map<String, Integer>> 同key的value全部累加合并
    Restrictions用法
  • 原文地址:https://www.cnblogs.com/evilliu/p/8882626.html
Copyright © 2011-2022 走看看