spring02——面向切面的编程(AOP)

本文介绍了Spring框架中的面向切面编程(AOP)概念,通过四个步骤(拷贝jar包、建立源路径包、配置XML文件、创建Interceptor类)详细解释了AOP的实现过程。在doAroundMethod方法中,使用execution表达式指定拦截特定包下的所有方法,以此实现对多个类的统一修改,常见应用于日志记录和事务管理。
摘要由CSDN通过智能技术生成

面向切面:简单理解就是同时对很多类做修改。
1、拷贝jar包
2、建立源路径包
3、配置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"
	xmlns:p="http://www.springframework.org/schema/p" 
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	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   
               http://www.springframework.org/schema/tx 
               http://www.springframework.org/schema/tx/spring-tx.xsd 
               http://www.springframework.org/schema/context 
               http://www.springframework.org/schema/context/spring-context.xsd">

	<!-- 启动aspectj支持 -->
	<aop:aspectj-autoproxy/>
	<bean id="inteceptor" class="com.huaxin.edu.inter.Interceptor"></bean>
	
	<aop:config>
		<aop:aspect ref="inteceptor">
			<aop:pointcut expression="execution(* com.huaxin.edu.busin..*.*(..))" id="pointAction"/>
			<aop:around method="doAroundMethod" pointcut-ref="pointAction"/>
		</aop:aspect>
	</aop:config>
	
	
	<bean id="bean1" class="com.huaxin.edu.busin.Bean1"></bean>
	<bean id="bean2" class="com.huaxin.edu.busin.Bean2"></bean>
</beans>

4、建立Interceptor类,创建doAroundMethod方法,名称有配置文件决定

package com.huaxin.edu.inter;

import org.aspectj.lang.ProceedingJoinPoint;

public class Interceptor {
	public void doAroundMethod(ProceedingJoinPoint pjp)
	{
		// 调用的方法名
		String clazz = pjp.getTarget().getClass().getName();
		System.out.println("调用"+clazz+"类中的方法"+pjp.getSignature().getName());
		
		// 获取函数参数
		System.out.println("调用方法的参数:");
		Object[] args = pjp.getArgs();
		for(Object arg:args)
		{
			System.out.print(arg);
		}
		
		System.out.println();
		
		Object res = null;
		long time = 0;
		try {
			long start = System.currentTimeMillis();
			res = pjp.proceed();
			long end = System.currentTimeMillis();
			time = end - start;
		} catch (Throwable e) {
			e.printStackTrace();
		}// 执行被代理方法
		
		
		// 获取返回值
		System.out.println("调用方法的结果:");
		System.out.print(res);
		System.out.println();
		System.out.println("执行所花时间:"+time+"毫秒");
	}
}

res = pjp.proceed();这句话是原本类的方法。
execution(* com.huaxin.edu.busin….(…))这句话就代表com.huaxin.edu.busin的包下所有方法要想执行,就相当于执行doAroundMethod方法。如此即为面向切面的编程,在日志文件和事务方面应用广泛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值