基于Annotation的Spring AOP: @After

@After与@AfterReturning有点相似,但是也有区别:

AfterReturning 增强处理只在目标方法成功完成后才会被织入。

After 增强处理不管目标方法如何结束,包括成功完成和遇到异常终止两种情况,它都会被织入。

因为不论一个方法是如何结束的,After增强处理都会被织入,因此After增强处理必须准备处理正常返回和异常返回两种情况,这种增强处理通常用于释放资源。


Person.java :

public interface Person {
	public String sayHello(String name);
	public void divide();
}
Chinese.java :

@Component
public class Chinese implements Person {

	@Override
	public void divide() {
		int a=5/0;
		System.out.println("divide执行完成!");
	}

	@Override
	public String sayHello(String name) {
		try {
			System.out.println("sayHello方法开始被执行...");
			new FileInputStream("a.txt");
		} catch (FileNotFoundException e) {
			System.out.println("目标类的异常处理"+e.getMessage());
		}
		return name+" Hello,Spring AOP";
	}

	
}
AfterAdviceTest.java :

/**
 * 定义一个切面
 * @author Administrator
 *
 */
@Aspect
public class AfterAdviceTest {
	
	@After("execution(* com.bean.*.*(..))")
	public void realease(){
		System.out.println("模拟方法结束后的释放资源...");
	}
}
bean.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:context="http://www.springframework.org/schema/context"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context 
                http://www.springframework.org/schema/context/spring-context-2.5.xsd
                http://www.springframework.org/schema/tx
                http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                http://www.springframework.org/schema/aop
                http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    
    
    <context:component-scan base-package="com.bean">
        <context:include-filter type="annotation" 
                 expression="org.aspectj.lang.annotation.Aspect"/>
    </context:component-scan>
    
    <aop:aspectj-autoproxy/>
    
 </beans>
Test.java :

public class Test {
	public static void main(String[] args) {
		
		ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
		Person p=(Person) ctx.getBean("chinese");
		System.out.println(p.sayHello("张三"));
		p.divide();
	}
}

运行控制台输出:


由此可见,After增强处理的作用类似于异常处理中的finally块的作用------无论如何,它总会在方法执行结束之后被织入,因此特别适用于进行资源回收。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值