Spring Study -lesson12 -AOP-2023-03-18

Posted RUI2022

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Study -lesson12 -AOP-2023-03-18相关的知识,希望对你有一定的参考价值。

AOP方法一:通过Spring API接口实现

    <bean id="userService" class="com.feijian.service.UserServiceImpl"/>
    <bean id="log" class="com.feijian.log.Log"/>
    <bean id="afterLog" class="com.feijian.log.AfterLog"/>

    <!--    方式一:使用原生spring API接口-->
   <!--配置AOP    -->
<!--    <aop:config>-->
<!--    &lt;!&ndash;切入点 execution要执行的位置&ndash;&gt;-->
<!--        <aop:pointcut id="pointcut" expression="execution(* com.feijian.service.UserServiceImpl.*(..))"/>-->
<!--        -->
<!--    &lt;!&ndash;执行环绕增加!&ndash;&gt;-->
<!--        <aop:advisor advice-ref="log" pointcut-ref="pointcut"/>-->
<!--        <aop:advisor advice-ref="afterLog" pointcut-ref="pointcut"/>-->
<!--    </aop:config>-->

AOP方法二:自定义类实现-主要是切面定义

package com.feijian.diy;

public class DiyPointCut 
    public void before()
        System.out.println("--------------方法执行前-----------------");
    

    public void after()
        System.out.println("--------------方法执行后-----------------");
    
<!--    方法二:自定义类-->
    <bean id="diy" class="com.feijian.diy.DiyPointCut"/>

    <aop:config>
        <aop:aspect ref="diy">
            <!-- 切入点-->
            <aop:pointcut id="point" expression="execution(* com.feijian.service.UserServiceImpl.*(..))"/>
            <!-- 通知-->
            <aop:before method="before" pointcut-ref="point"/>
            <aop:after method="after" pointcut-ref="point"/>
        </aop:aspect>
    </aop:config>

第三,使用注解实现AOP

package com.feijian.diy;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class AnnotationPointCut 
    @Before("execution(* com.feijian.service.UserServiceImpl.*(..))")
    public void before()
        System.out.println("==============方法执行前===================");
    

    @After("execution(* com.feijian.service.UserServiceImpl.*(..))")
    public void after()
        System.out.println("==============方法执行后===================");
    

    @Around("execution(* com.feijian.service.UserServiceImpl.*(..))")
    public void around(ProceedingJoinPoint joinPoint) throws Throwable 
        System.out.println("环绕前");
        Object proceed = joinPoint.proceed();
        System.out.println("环绕后");
    
<!--方式三-->
<bean id="annotationPointCut" class="com.feijian.diy.AnnotationPointCut"/>
<!--开启注解支持!-->
<aop:aspectj-autoproxy/>

以上是关于Spring Study -lesson12 -AOP-2023-03-18的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Study

我的spring-boot-study之mongodb的应用

我的spring-boot-study之mongodb的应用

我的spring-boot-study之mybatis的应用

我的spring-boot-study之mybatis的应用

leo--study