首页 > 编程语言 > 详细

spring xml方式实现aop

时间:2020-05-09 22:26:41      阅读:58      评论:0      收藏:0      [点我收藏+]

概念

aop:面向切面编程

aop底层实现:基于JDK的动态代理 和 基于Cglib的动态代理

aop的重点概念:

Pointcut(切入点):被增强的方法

Advice(通知/ 增强):封装增强业务逻辑的方法

Aspect(切面):切点+通知

Weaving(织入):将切点与通知结合的过程

开发明确事项: 谁是切点(切点表达式配置) 谁是通知(切面类中的增强方法) 将切点和通知进行织入配置

步骤:

1导入 AOP 相关坐标

2创建目标接口和目标类(内部有切点)

3创建切面类(内部有增强方法)

4将目标类和切面类的对象创建权交给 spring

5在 applicationContext.xml 中配置织入关系

6测试代码 

代码实现

1导入 AOP 相关坐标

 

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

 

 

 

2创建目标接口和目标类(内部有切点)

 

package com.itheima.aop;

public class Target implements TargetInterface {
    public void save() {
        System.out.println("save running.....");
        //int i = 1/0;
    }
}

 

package com.itheima.aop;

public interface TargetInterface {

    public void save();

}

 

 

3创建切面类(内部有增强方法)

 

package com.jiang.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

public class aspect {
    public Object around(ProceedingJoinPoint prj) throws Throwable {
        System.out.println("1");
        Object proceed = prj.proceed();
        System.out.println("2");
        return proceed;
    }
}

4将目标类和切面类的对象创建权交给 spring

需要在xml中添加前置文件aop,添加目标对象,切面对象

5在 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="target" class="com.itheima.aop.Target"></bean>

<!--切面对象-->
<bean id="myAspect" class="com.itheima.aop.MyAspect"></bean>

<!--配置织入:告诉spring框架 哪些方法(切点)需要进行哪些增强(前置、后置...)-->
<aop:config>
<!--声明切面-->
<aop:aspect ref="myAspect">
<!--抽取切点表达式-->
<aop:pointcut id="myPointcut" expression="execution(* com.itheima.aop.*.*(..))"></aop:pointcut>
<!--切面:切点+通知-->
<!--<aop:before method="before" pointcut="execution(public void com.itheima.aop.Target.save())"/>-->
<!--<aop:before method="before" pointcut="execution(* com.itheima.aop.*.*(..))"/>
<aop:after-returning method="afterReturning" pointcut="execution(* com.itheima.aop.*.*(..))"/>-->
<!--<aop:around method="around" pointcut="execution(* com.itheima.aop.*.*(..))"/>
<aop:after-throwing method="afterThrowing" pointcut="execution(* com.itheima.aop.*.*(..))"/>
<aop:after method="after" pointcut="execution(* com.itheima.aop.*.*(..))"/>-->
<aop:around method="around" pointcut-ref="myPointcut"/>
<aop:after method="after" pointcut-ref="myPointcut"/>

</aop:aspect>
</aop:config>

</beans>

 

 

 

6测试代码 

 

import com.jiang.target.targetImpl;
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:applicationContext1.xml")
public class test1 {
    @Autowired
private targetImpl target;
@Test
    public void test(){
    target.save();

}

}

 

spring xml方式实现aop

原文:https://www.cnblogs.com/jiangzishun/p/12860307.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!