基于代理类ProxyFactoryBean的AOP(面向切面)实现的小案例

我们知道Spring的动态代理,本文就讲动态代理运用到AOP的小案例。

效果:

准备工作:

新建一个项目(我这里取名为chapter03),向WebContent的WEB-INF下的lib中,导入Spring框架所需要的jar包和第三方依赖包,另外还需要导入包aopalliance-1.0.jar,如果你用的Spring版本不兼容,可以找找别的版本。导入包完成后右键build path到项目路径中去。

1、在包com.itheima.jdk下创建UserDao接口

package com.itheima.jdk;

public interface UserDao {
	public void addUser();
	public void deleteUser();
}

 2、在包com.itheima.jdk下创建UserDao接口的实现类UserDaoImpl

package com.itheima.jdk;

import org.springframework.stereotype.Repository;

public class UserDaoImpl implements UserDao {

	@Override
	public void addUser() {
		System.out.println("添加用户");

	}

	@Override
	public void deleteUser() {
		System.out.println("删除用户");

	}

}

3、新建包com.itheima.factorybean下创建切面类MyAspect,并实现接口MethodInterceptor及编写其方法invoke()

package com.itheima.factorybean;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;

public class MyAspect implements MethodInterceptor {

	@Override
	public Object invoke(MethodInvocation mi) throws Throwable {
		check_Permissions();
		//执行目标方法
		Object obj = mi.proceed();
		log();
		return obj;
	}
	
	public void check_Permissions() {
		System.out.println("权限检查、、、、");
	}
	
	public void log() {
		System.out.println("记录日志、、、、");
	}

}

 4、在包com.itheima.factorybean下创建配置文件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">
    <!-- 目标类-->
    <bean id="userDao" class="com.itheima.jdk.UserDaoImpl"></bean>
    <!--切面类-->
    <bean id="myAspect" class="com.itheima.factorybean.MyAspect"></bean>
    <!--代理类-->
    <bean id="userDaoProxy"class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置代理类的相关属性-->
        <!--指定代理实现的接口-->
    	<property name="proxyInterfaces" value="com.itheima.jdk.UserDao" />
    	<property name="target" ref="userDao" />
        <!--指定切面,植入环绕通知-->
    	<property name="interceptorNames" value="myAspect" />
    	<property name="proxyTargetClass" value="true"/><!--true使用cglib代理,否则jdk代理-->
    </bean>
    
    
</beans>

3、在包com.itheima.factorybean下创建测试类FactoryBeanTest

package com.itheima.factorybean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.itheima.jdk.UserDao;

//测试类
public class ProxyFactoryBeanTest {

	public static void main(String[] args) {
		//配置文件路径
		String xmlPath = "com/itheima/factorybean/applicationContext.xml";
//                创建Spring容器的路径
		ApplicationContext applicationContext = new
				ClassPathXmlApplicationContext(xmlPath);
		UserDao userDao = (UserDao)     applicationContext.getBean("userDaoProxy");
		//执行方法
		userDao.addUser();
		userDao.deleteUser();
	}

}
发布了38 篇原创文章 · 获赞 9 · 访问量 1457

猜你喜欢

转载自blog.csdn.net/qq_42023080/article/details/105168401