【Spring】Spring AOP的实现例子(基于XML配置实现)

AOP的介绍

什么是AOP?


  • AOP为Aspect Oriented Programming的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

  • AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。


AOP的概念


Spring的AOP实现底层就是对上面的动态代理的代码进行了封装,封装后我们只需要对需要关注的部分进行代码编写,并通过配置的方式完成指定目标的方法增强。

  • AOP的一些术语
    Target(目标对象)︰代理的目标对象
    Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
    Joinpoint(连接点)︰所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
    Pointcut(切入点)︰所谓切入点是指我们要对哪些Joinpoint进行拦截的定义
    Advice(通知/增强)︰所谓通知是指拦截到Joinpoint之后所要做的事情就是通知
    Aspect(切面)︰是切入点和通知(引介)的结合
    Weaving (织入)︰是指把增强应用到目标对象来创建新的代理对象的过程。spring采用动态代理织入,而Aspect采用编译期织入和类装载期织入

代码实现及讲解

代码实现

时间工具类


import java.text.SimpleDateFormat;
import java.util.Date;

public class DateUtils {
	public  String parseDate() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println(sdf.format(new Date()));
		return sdf.format(new Date());
	}
}

接口和实现类


public interface Human {
	void doWork();
	String doEat();
}
public class People {
	public void doWork() {
		System.out.println("正在上班.....");
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("已经下班.....");
	}

	public String doEat() {
		// TODO Auto-generated method stub
		return "正在吃饭";
	}
}

配置XML文件


	<bean id="date" class="com.demo.aop.DateUtils">
	</bean>
	<bean id="people" class="com.demo.aop.People">
	</bean>
	<aop:config proxy-target-class="true">
		<aop:pointcut expression="execution(* com.demo.aop.People.*(..))"
			id="aop1" />
		<aop:aspect id="d" ref="date">
			<aop:before method="parseDate" pointcut-ref="aop1" />
			<aop:after-returning method="parseDate"
				pointcut-ref="aop1" />
		</aop:aspect>
	</aop:config>

测试


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

public class Test {
	public static void main(String[] args) {
		String config = "spring/aop.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(config);
		 People people = ac.getBean("people", People.class);
		 people.doWork();
	}
}

结果


在这里插入图片描述


XML文件讲解

在这里插入图片描述

这一句是声明切入点,切入点的 id 叫 loggerCutPoint ,用来标记这个切入点
这个expression表示:满足expression中的方法调用之后,就会去进行切面操作,类似于触发了切面
第一个 * 代表返回任意类型
com.demo.aop.People.*表示com.demo.aop.People这个类里面的任意一个方法,也就是说任意一个方法都会触发
注意:类的路径和第一个*之间要加上空格
在这里插入图片描述
aop:aspect id="d" ref="data">表示辅助类时date,也就是上面bean的id
<aop:before method="parseDate" pointcut-ref="aop1" />表示当处罚aop1的条件之前先运行parseDate方法
其他的几种
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值