AOP动态代理声明式的3种配置方式过程与区别

本文详细介绍了AOP的三种声明式配置方式:基础配置、低耦合处理配置和Annotation配置。每种方式都包含了配置要求、配置过程案例和区别分析。基础配置要求通知类实现特定接口,而低耦合处理配置和Annotation配置则降低了通知类的耦合。低耦合处理配置通过<aop:config></aop:config>配置切点和切面,Annotation配置使用@aspect注解和切点注解形成切面。三种方式在目标对象、通知类、代理工厂配置和使用方式上有所不同。
摘要由CSDN通过智能技术生成

AOP声明式的3种配置方式为AOP基础配置方式、AOP低耦合处理配置方式、Annotation配置方式,以下是解析。

一、AOP基础配置方式

下载本文章演示案例工程代码

(一)配置要求

AOP基础配置方式适用于任何spring版本。这种配置方式要求去是:

  1. 通知去实现相应的MethodXxxxAdvice接口,Xxxx代表通知的类型,比如前置通知类需要去实现MethodBeforeAdvice接口;
  2. 通知类对象和目标类对象得在中Spring容器中声明;
  3. 在Spring容器中适用代理工厂ProxyFactoryBean创建代理对象并做织入操作,配置中必须给代理工厂ProxyFactoryBean提供通知类和目标对象才能成功创建。
    AOP基础配置方式图解如下图所示:
    在这里插入图片描述

(二)配置过程案例演示

1.创建通知类IofoBeforAdvice并实现相应接口
package testspringAOP.aop.advice;
import java.lang.reflect.Method;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.aop.MethodBeforeAdvice;
/**前置通知类
 * @author CenterLogo
 *create date :2019年4月28日 下午9:25:32
 */
class IofoBeforAdvice implements MethodBeforeAdvice {//基础配置方式通知类需要事实现MethodBeforeAdvice接口
	//产生一个日志对象
     private Log log=LogFactory.getLog(IofoBeforAdvice.class);//所有框架都需要日志来支撑
	public IofoBeforAdvice() {}
	public void before(Method method, Object[] args, Object target) throws Throwable {
        log.info("目标对象"+target);
        log.info("访问方法名"+method.getName());
        log.info("姓名"+args[0]);
        log.info("年龄"+args[1]);
	}
}
2.创建目标类接口InfoService
package testspringAOP.aop.service;
/**
 * @author CenterLogo
 *create date :2019年4月28日 下午9:04:05
 */
/**
 * 获取如人员基本信息,
 * @param name 姓名
 * @param age 年龄
 * @return 基本信息
 * */
public interface InfoService {
public String getInfo(String name,int age);
public String insertInfo3(String name, int age);
}

3.创建目标类接口实现类(目标对象)InfoServiceImpl
package testspringAOP.aop.service;
/**
 * @author CenterLogo
 *create date :2019年4月28日 下午9:08:21
 */
public class InfoServiceImpl implements InfoService {
	/**实现类,用户想执行的类,目标类,目标对象
	 */
	public InfoServiceImpl() {	}
	public String getInfo(String name, int age) {
		// TODO Auto-generated method stub
		return "姓名:"+name+"\n年龄:"+String.valueOf(age);//将age转换为字符串效率会提高
	}
	public String insertInfo3(String name, int age) {
		// TODO Auto-generated method stub
		return null;
	}
}
4.创建并配置Spring容器(SpringAOP.xml),用ProxyFactoryBean配置代理工厂(详解看代码注释)。
<?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">
<!-- 一、基础配置方式,没有切点、切面的的概念-->		
<!-- AOP声明 -->

<!--1. 声明通知类 ,创建通知类对象-->  
<bean id="infobeforeadvice" class="testspringAOP.aop.advice.IofoBeforAdvice"></bean>
<!--2. 声明目标类,创建目标类对象 -->  
  <bean id="IonfoServiceImpl" class="testspringAOP.aop.service.InfoServiceImpl"></bean>

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值