欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring-AOP xml方式配置

程序员文章站 2022-03-10 08:36:30
1.新建Maven项目2. pom.xml 引入依赖 org.springframework spring-context 5.0.9.RELEASE &...

1.新建Maven项目

Spring-AOP xml方式配置

Spring-AOP xml方式配置

2. pom.xml 引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>1.8.13</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.0.9.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

主要用到了

spring框架、aspectj(这个就是aop啦,说是比spring里面的aop还好用)、spring-test(一会测试spring要用到),junit

3. 新建 目标对象,这边我还是创建了接口类

package com.itheima;

public interface ITarget {
    void save();
}
package com.itheima.impl;

import com.itheima.ITarget;

public class Target implements ITarget {
    public void save() {
        System.out.println("saveing...");
    }
}

4. 创建 applicationContext.xml

 <bean id="target" class="com.itheima.impl.Target"></bean>

5. 创建测试类

package com.itheima.test;

import com.itheima.ITarget;
import com.itheima.impl.Target;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:ApplicationContext.xml")
public class AopTest {
    @Autowired
    private ITarget target;

    @Test
    public void test1(){
        target.save();
    }
}

测试通过

6. 创建增强类

package com.itheima.impl;

import org.aspectj.lang.ProceedingJoinPoint;

/*
增强
 */
public class MyAspect {
    public void before(){
        System.out.println("前置增强...");
    }

    public void afterReturnRuning(){
        System.out.println("后置增强...");
    }

    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("环绕前。。。");
        System.out.println(pjp.toString());
        Object proceed = pjp.proceed();
        System.out.println("环绕后。。。");
        return proceed;
    }

    public void afterThrowing(){
        System.out.println("异常增强。。。");
    }
}

7. 在 applicationContext.xml 中配置aop

<aop:config>
        <aop:aspect ref="myaspect">
<!--            <aop:pointcut id="myPointcut" expression="execution(public void com.itheima.impl.Target.save())"/>-->
<!--            <aop:pointcut id="myPointcut1" expression="execution(* *..*(..))"/>-->
            <aop:pointcut id="myPointcut" expression="execution(public void *..*(..))"/>
<!--            <aop:before method="before" pointcut-ref="myPointcut" />-->
<!--            <aop:after-returning method="afterReturnRuning" pointcut-ref="myPointcut1"></aop:after-returning>-->
            <aop:around method="around" pointcut-ref="myPointcut"></aop:around>
            <aop:after-throwing method="afterThrowing" pointcut-ref="myPointcut"></aop:after-throwing>
        </aop:aspect>
    </aop:config>

初始可先这么设置

<aop:before method="before" pointcut="execution(public void com.itheima.impl.Target.save())"></aop:before>

分拆为 访问修饰符(可省略) 返回类型 包名.类名.方法名(参数)

任意参数可用 ..  表示 两个点

返回类型,包名,类名,方法名可用 * 表示任意

*..* 可表示包名下的任意子包名

运行测试类,如果用通配符,发现会多执行一次,打印一下

多执行了这个  execution(void org.springframework.beans.factory.SmartInitializingSingleton.afterSingletonsInstantiated())

时间有限,先到这里。

本文地址:https://blog.csdn.net/shua67/article/details/112238183

相关标签: java spring AOP