Spring编写代理:expression表达式通过XML配置来实现AOP

本文介绍了如何使用Spring框架,通过XML配置和expression表达式来实现面向切面编程(AOP)。文章内容包括目标类和接口定义、切面类的创建、测试类的设计以及具体的XML配置步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

9-8:spring编写代理:【expression表达式通过XML配置来实现AOP

  1. 让spring 创建代理对象,从spring容器中手动的获取代理对象。
  2. 导入jar包:

         核心:4+1

         AOP:AOP联盟(规范)、spring-aop (实现)织入包 aop联盟包

 

 

9-8-1:目标类和接口

public interface UserService {

    public void addUser();

    public void updateUser();

    public void deleteUser();

}

@Service("userServiceId")

public class UserServiceImpl implements UserService {

   

    public void addUser() {

       System.out.println("c_aspectJ_aop addUser");

    }

    public void updateUser() {

       System.out.println("c_aspectJ_aop updateUser");

    }

    public void deleteUser() {

       System.out.println("c_aspectJ_aop deleteUser");

    }

}

9-8-2: 切面类

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

public class MyAspect implements MethodInterceptor{

    public Object invoke(MethodInvocation arg0) throws Throwable {

       // TODO Auto-generated method stub

       System.out.println("方法前处理");

       Object obj=arg0.proceed();//执行目标行为

       System.out.println("方法后处理");

       return obj;

    }

}

9-8-2:测试类:

public class TestSpringAOP {

   

    public static void main(String[] args) {

       TestSpringAOP aop=new TestSpringAOP();

       aop.demo01();

    }

    public void demo01(){

       String xmlPath = "com/hx/aop/auto/beans.xml";

       ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);

       //获得目标类

       UserService userService = (UserService) applicationContext.getBean("userServiceId");

       userService.addUser();

       userService.updateUser();

       userService.deleteUser();

    }

}

9-8-3: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">

       <!-- 1 创建目标类 -->

    <bean id="userServiceId" class="com.hx.aop.auto.UserServiceImpl"></bean>

       <!-- 2 创建切面类(通知) -->

     <bean id="myAspectId" class="com.hx.aop.auto.MyAspect"></bean>

       <!-- 3 aop编程

       3.1 导入命名空间

       3.2 使用 <aop:config>进行配置

              proxy-target-class="true" 声明时使用cglib代理

           <aop:pointcut> 切入点 ,从目标对象获得具体方法

           <aop:advisor> 特殊的切面,只有一个通知 一个切入点

              advice-ref 通知引用

              pointcut-ref 切入点引用

       3.3 切入点表达式

           execution(* com.hx.c_spring_aop.*.*(..))

           选择方法         返回值任意                                                类名任意   方法名任意   参数任意

      

    -->

    <aop:config proxy-target-class="true">

       <aop:pointcut expression="execution(* com.hx.aop.auto.*.*(..))" id="myPointcut"/>

       <aop:advisor advice-ref="myAspectId" pointcut-ref="myPointcut"/>

    </aop:config>

</beans>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值