zoukankan      html  css  js  c++  java
  • Spring的AOP快速实现通用日志打印

    需求分析

      针对VideoService接口实现日志打印

    三个核心包

    • spring-aop:AOP核心功能,例如代理工厂
    • aspectjweaver:简单理解,支持切入点表达式
    • aspectjrt:简单理解,支持aop相关注解

    定义Service接口和实现类

    VideoService.java

    package net.cybclass.sp.servicce;
    
    import net.cybclass.sp.domain.Video;
    
    public interface VideoService {
        int save(Video video);
        Video findById(int id);
    }

    VideoServiceImpl.java

    package net.cybclass.sp.servicce;
    
    import net.cybclass.sp.domain.Video;
    
    public class VideoServiceImpl implements VideoService{
        public int save(Video video) {
            System.out.println("保存Video");
            return 0;
        }
    
        public Video findById(int id) {
            System.out.println("根据id找视频");
            return new Video();
        }
    }

    定义横切关注点

       <bean id="timeHandler" class="net.cybclass.sp.aop.TimeHandler"></bean>
        <bean id="videoService" class="net.cybclass.sp.servicce.VideoServiceImpl"></bean>
        <!-- aop的配置 -->
        <aop:config>
            <!--切面-->
            <aop:aspect id="timeAspect" ref="timeHandler">
                <!--连接点-->
                <aop:pointcut id="allMethodLogPointCut" expression="execution(* net.cybclass.sp.servicce.VideoService.*(..))"/>
                <!--前置通知-->
                <aop:before method="printBefore" pointcut-ref="allMethodLogPointCut"></aop:before>
                <!--后置通知-->
                <aop:after method="printBefore" pointcut-ref="allMethodLogPointCut"></aop:after>
            </aop:aspect>
        </aop:config>

    完整版applicationContext.xml

    <?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">
        <bean id="timeHandler" class="net.cybclass.sp.aop.TimeHandler"></bean>
        <bean id="videoService" class="net.cybclass.sp.servicce.VideoServiceImpl"></bean>
        <!-- aop的配置 -->
        <aop:config>
            <!--切面-->
            <aop:aspect id="timeAspect" ref="timeHandler">
                <!--连接点-->
                <aop:pointcut id="allMethodLogPointCut" expression="execution(* net.cybclass.sp.servicce.VideoService.*(..))"/>
                <!--前置通知-->
                <aop:before method="printBefore" pointcut-ref="allMethodLogPointCut"></aop:before>
                <!--后置通知-->
                <aop:after method="printBefore" pointcut-ref="allMethodLogPointCut"></aop:after>
            </aop:aspect>
        </aop:config>
    </beans>

    引入相关包

           <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.5</version>
            </dependency>

    完整pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>net.cybcclass</groupId>
        <artifactId>cyb_spring</artifactId>
        <version>1.0-SNAPSHOT</version>
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>5.2.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.5.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.9.5</version>
            </dependency>
        </dependencies>
    </project>

    演示

  • 相关阅读:
    转载---JVM四种引用--用于记录知识
    Ionic的安装、创建、及一些记录
    Angular响应式表单--附上完整代码演示
    Angular自定义模块—使用路由实现懒加载--及错误解决
    Angular自定义模块(普通)
    Angula获取服务器数据
    Angular同步与异步获取服务数据(附完整代码)
    Angular父子组件的方法传递以及数据传递
    logrotate
    Capistrano 3
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13306527.html
Copyright © 2011-2022 走看看