<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<!-- 注册目标对象 -->
<bean id="someService" class="com.gqc.aop01.SomeServiceImpl"/>
<!-- 注册切面:通知 -->
<bean id="myAdvice" class="com.gqc.aop01.MyMethodBeforeAdvice"/>
<!-- 生成代理对象 -->
<bean id="serviceProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 指定目标对象 -->
<property name="target" ref="someService"/>
<!-- <property name="targetName" value="someService"/> 两者都可以-->
<!-- 指定切面 -->
<property name="interceptorNames" value="myAdvice"/>
</bean>
</beans>
package com.gqc.aop01;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void test01() {
//创建容器对象 加载Spring 配置文件
String resource = "com/gqc/aop01/appliactionContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(resource);
ISomeService service=(ISomeService)ac.getBean("serviceProxy");
service.doFirst();
System.out.println("-----------------");
service.doSecond();
}
}
package com.gqc.aop01;
import java.lang.reflect.Method;
import org.springframework.aop.MethodBeforeAdvice;
//前置通知
public class MyMethodBeforeAdvice implements MethodBeforeAdvice {
//当前方法在目标方法执行之前执行
//method:目标方法
//args:目标方法的 参数列表
//target:目标对象
@Override
public void before(Method method, Object[] args, Object target)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("执行前置通知方法");
}
}