aop实例

AOP有一个思想就是在原业务功能不改变的前提下,动态的根据需要插入“某方法”运行

 

最重要的就是切面切点的配置 ,即:aop.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-4.0.xsd">

	<!-- 配置 bean -->
	<bean id="a" class="com.edu.aop.hello.xml.A"></bean>
	<bean id="b" class="com.edu.aop.hello.xml.B"></bean>
	<bean id="c" class="com.edu.aop.hello.xml.C"></bean>
	
	<bean id="x" class="com.edu.aop.hello.xml.X"></bean>
	
	<!-- 配置 AOP -->
	<aop:config>		
		<!-- 配置切面及通知 -->
		<aop:aspect ref="x">
			<aop:before method="mX1" pointcut="execution(* com.edu.aop.hello.xml.B.*())"/>
			<aop:after method="mX2" pointcut="execution(* com.edu.aop.hello.xml.B.*())"/>		
		</aop:aspect>			
	</aop:config>
	
	
</beans>

 

切面代码如下

package com.edu.aop.hello.xml;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import org.aspectj.lang.JoinPoint;

public class X {
	public void mX1(JoinPoint joinPoint) {
		// 连接点对象做参数,利用该参数,获取目标对象的方法
		String methodName = joinPoint.getSignature().getName();
		System.out.println("我是前置通知,在B类方法:" + methodName + "()运行前被切入!");
		// 获取当前系统的时间,并转换为yyyy年MM月dd日 HH:mm:ss格式,并显示
		Calendar startTimeNow = Calendar.getInstance();
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		String startTime = fmt.format(startTimeNow.getTime());
		System.out.println("B类方法:" + methodName + "(),运行开始时间:" + startTime);
	}

	public void mX2(JoinPoint joinPoint) {
		// 连接点对象做参数,利用该参数,获取目标对象的方法
		String methodName = joinPoint.getSignature().getName();
		System.out.println("我是后置通知,在B类方法:" + methodName + "()运行后被切入!");
		// 获取当前系统的时间,并转换为yyyy年MM月dd日 HH:mm:ss格式,并显示
		Calendar endTimeNow = Calendar.getInstance();
		SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
		String endTime = fmt.format(endTimeNow.getTime());
		System.out.println("B类方法:" + methodName + "(),运行结束时间:" + endTime);
	}

}

 

主类:

package com.edu.aop.hello.xml;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//这是主类,直接运行
public class MainXml {	
	public static void main(String[] args) {		
		//(1)创建IoC容器		
		//ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext_dataSource.xml");
		ApplicationContext ctx = new ClassPathXmlApplicationContext("aop_hello_xml.xml");
		//(2)从容器IoC中获取对象
		A a = (A) ctx.getBean("a");
		B b = (B) ctx.getBean("b");
		C c = (C) ctx.getBean("c");
		//(3)使用对象
		a.mA1();
		b.mB2();
		a.mA2();
		b.mB1();
		c.mC1();
	}	
}

最后的运行结果:

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值