切面类
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyAspect implements MethodInterceptor{
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
System.out.println("前");
// 手动执行目标方法
Object obj = mi.proceed();
System.out.println("后");
return obj;
}
}
接口
public interface UserService {
void addUser();
void updateUser();
}
实现类
public class UserServiceImpl implements UserService {
@Override
public void addUser() {
System.out.println("bean adduser...");
}
@Override
public void updateUser() {
System.out.println("bean updateUser...");
}
}
配置文件
<?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">
<!-- 1.创建目标类 -->
<bean id="userService" class="com.atchina.b_factory_bean.UserServiceImpl"/>
<!-- 2.创建切面类 -->
<bean id="myAspect" class="com.atchina.b_factory_bean.MyAspect"/>
<!-- 3.创建代理类
ProxyFactoryBean用于创建工厂bean,生成特殊代理对象
interfaces: 确定接口
target: 确定目标类
interceptorNames: 通知, 切面类的名称, 类型是string[],
-->
<bean id="proxyService" class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="interfaces" value="com.atchina.b_factory_bean.UserService"></property>
<property name="target" ref="userService"></property>
<property name="interceptorNames" value="myAspect"></property>
</bean>
</beans>
测试类:
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestFactoryBean {
@Test
public void test(){
String xmlPath = "com/atchina/b_factory_bean/applicationContext.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(xmlPath);
UserService userService = (UserService)ac.getBean("proxyService");
userService.addUser();
}
}