UserDao.java接口:
package com.liu.jdk;
public interface UserDao {
public void addUser();
public void deleteUser();
}
UserDaoImpl.java接口实现类:
package com.liu.jdk;
//目标类
public class UserDaoImpl implements UserDao {
@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("添加方法");
}
@Override
public void deleteUser() {
// TODO Auto-generated method stub
System.out.println("删除方法");
}
}
MyAspect.java切面类:
package com.liu.factorybean;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MyAspect implements MethodInterceptor {
public void chek() {
System.out.println("模拟检查权限...");
}
public void log() {
System.out.println("模拟记录日志...");
}
@Override
public Object invoke(MethodInvocation arg) throws Throwable {
// TODO Auto-generated method stub
chek();
Object obj = arg.proceed();
log();
return obj;
}
}
ApplicationContext.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd ">
<!-- 1 目标类 -->
<bean id = "userDao" class = "com.liu.jdk.UserDaoImpl"></bean>
<!-- 2 切面类 -->
<bean id = "aspect" class = "com.liu.factorybean.MyAspect"></bean>
<!-- 3 使用spring代理工厂定义一个名称为userDaoProxy的代理对象 -->
<bean id = "userDaoProxy" class = "org.springframework.aop.framework.ProxyFactoryBean">
<!-- 3.1 指定代理实现的接口-->
<property name="proxyInterfaces" value = "com.liu.jdk.UserDao"></property>
<!-- 3.2 指定目标对象 -->
<property name="target" ref = "userDao"></property>
<!-- 3.3 指定切面 织入环绕通知 -->
<property name="interceptorNames" value = "aspect"></property>
<!-- 3.4 指定代理方式 true:使用cglib,false:使用jdk(默认false) -->
<property name="proxyTargetClass" value = "true"></property>
</bean>
</beans>
FactoryBeanTest.java测试类:
package com.liu.factorybean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.liu.jdk.UserDao;
public class FactoryBeanTest {
public static void main(String[] args) {
String xmlpath = "com/liu/factorybean/ApplicationContext.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);
UserDao userDao = (UserDao) applicationContext.getBean("userDaoProxy");
//执行
userDao.addUser();
userDao.deleteUser();
}
}
运行结果:
模拟检查权限...
添加方法
模拟记录日志...
模拟检查权限...
删除方法
模拟记录日志...
需要的包: