面向切面:简单理解就是同时对很多类做修改。
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方法。如此即为面向切面的编程,在日志文件和事务方面应用广泛。