代理目标类
package Bean;
public class Target {
public void save(){
System.out.println("save.......");
}
}
代理类
package proxy;
public class Advier {
public void before(){
System.out.println("前置通知.....");
}
}
xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy> 这个配置在配置注解开发的时候生成自动生成代理
在这里的时候没有用注解可以不开启-->
<!-- 配置代理目标类-->
<bean id="target" class="Bean.Target"></bean>
<!-- 配置切面类:要交给IOC管理才能生效产生代理对象-->
<bean class="proxy.Advier" id="advier"></bean>
<!-- 配置织入-->
<aop:config>
<!-- 声明切面-->
<aop:aspect ref="advier">
<!-- <aop:pointcut id="" expression=""/>-->
<!-- 切面=切入点+通知 通知就是method属性 切入点就是pointcut -->
<aop:before method="before" pointcut="execution(* Bean.Target.save(..))"></aop:before>
</aop:aspect>
</aop:config>
<!--
-->
</beans>
Test
package res;
import Bean.Target;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class testforproxy {
public static void main(String[] args) {
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("proxy.xml");
Target target = ac.getBean("target", Target.class);
target.save();
}
}
结果:
前置通知.....
save.......
public class testExection {
public static void main(String[] args) {
try {
System.out.println("***********");
int i=10/0;
System.out.println("++++++++++++=");
}catch (Exception e)
{
System.out.println("Exception...");
}finally {
System.out.println("finally.....");
}
}
}
***********
Exception...
finally.....