JAVA Spring中如何使用ProxyFactoryBean实现AOP

Spring的通知类型:

org.aopalliance.intercept.MethodInterceptor(环绕通知):

在目标方法执行前后实施增强,用于日志、事务管理等。

org.springframework.aop.MethodBeforeAdvice(前置通知):

在目标方法执行前实施增强,用于权限管理等。

org.springframework.aop.AfterReturning.Advice(后置通知):

用于执行后实施增强,用于关闭流、上传删除等功能。

org.springframework.aop.ThrowsAdvice(异常抛出通知):

方法抛出异常后实施增强,用于处理异常记录日志等功能。

org.springframework.aop.IntroductionInterceptor(引介通知):

在目标类中添加新方法和属性,用于修改低版本的程序。

 

ProxyFactoryBean:负责为其他Bean创建代理实例

通过案例演示ProxyFactoryBean创建AOP代理的过程

案例开始之前需要导入如下依赖包:

此处通知为环绕通知。

创建接口UserDao:

package cn.edu.gues.jdkAOP;

 

public interface UserDao {

public void addUser();

public void deleteUser();

}

 

 

创建userDaoImpl类,实现userDao接口:

package cn.edu.gues.jdkAOP;

 

public class UserDaoImpl implements UserDao {

//目标类

@Override

public void addUser() {

System.out.println("添加用户");

 

}

 

@Override

public void deleteUser() {

System.out.println("删除用户");

 

}

 

}

 

创建切面类MyAspect:

package cn.edu.proxyFac;

 

import org.aopalliance.intercept.MethodInterceptor;

import org.aopalliance.intercept.MethodInvocation;

//切面类

public class MyAspect implements MethodInterceptor {

 

@Override

 

public Object invoke(MethodInvocation method) throws Throwable {

 

//前置增强

check_Permissions();

 

//执行目标方法

Object obj = method.proceed();

 

//后置增强

 

log();

return obj;

}

 

public void check_Permissions() {

System.out.println("模拟检查权限...");

 

}

public void log(){

System.out.println("模拟记录日志...");

}

 

}

创建配置文件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="cn.edu.gues.jdkAOP.UserDaoImpl"></bean>

 <!--2.切面类 -->

    <bean id="myAspect" class="cn.edu.proxyFac.MyAspect"></bean>

 <!--3.使用spring代理工厂定义一个名为userDaoProxy代理对象 -->

  <bean id="userDaoProxy" class="org.springframework.aop.framework.ProxyFactoryBean">

   <!--3.1指定代理实现的接口 -->

   <property name="proxyInterfaces" value="cn.edu.gues.jdkAOP.UserDao"></property>

   <!--3.2指定目标对象-->

   <property name="target" ref="userDao"></property>

   <!--3.3指定切面,织入环绕通知 -->

   <property name="interceptorNames" value="myAspect"></property>

   <!--3.4指定代理方式,true使用cglib,false使用jdk动态代理 -->

   <property name="proxyTargetClass" value="true"></property>

  </bean>

 </beans>

创建测试类:ProxyFactoryBeanTest:

package cn.edu.proxyFac;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import cn.edu.gues.jdkAOP.UserDao;

 

public class ProxyFactoryBeanTest {

 

public static void main(String[] args) {

String xmlpath="cn/edu/proxyFac/applicationContext.xml";

 

ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xmlpath);

 

//从spring容器获得内容

UserDao userDao=(UserDao) applicationContext.getBean("userDaoProxy");

 

//执行方法

 

userDao.addUser();

userDao.deleteUser();

}

 

}

运行结果图:

本博客仅供个人学习,请勿用于商业用途。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值