spring aop代替jdk动态代理模式简单实现

用spring aop 代替jdk动态代理模式,对目标接口的方法进行切入业务

  1. 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" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.3.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
	<context:component-scan base-package="com.ss" />
	
	<aop:aspectj-autoproxy />

	<!-- 注册需要被横切的类 -->
	<bean id="dao" class="com.ss.dao.Dao" />
	<!-- 注册切面类 -->
	<bean id="daoAspect" class="com.ss.spring.DaoAspect" />
	<!-- 配置aop -->
	<aop:config>
		<!-- 配置具体切面,调用切面类 -->
		<aop:aspect id="theAspect" ref="daoAspect">
			<!-- 对哪些方法进行切入,进行增强 -->
			<aop:pointcut id="myPointcut"	expression="execution(public * com.ss.dao..*.*(..))" />
			<!-- 切入方法 -->
			<aop:before pointcut-ref="myPointcut" method="beforeMe" />
			<aop:after pointcut-ref="myPointcut" method="afterMe" />
			<aop:after-throwing method="thr" pointcut-ref="myPointcut" throwing="ex"/>
			<aop:after-returning method="rt"/>
		</aop:aspect>
	</aop:config>

</beans>
  1. 切面类
package com.ss.spring;


/**
 * 切面类
 * @author Administrator
 *
 */
public class DaoAspect {
	/**
	 * 切面方法。注意方法名对应
	 */
	public void beforeMe(){
		System.out.println("before");
	}
	
	public void afterMe(){
		System.out.println("after");
	}
	
	public void thr(){
		System.out.println("thr");
	}
}

  1. 被切入的目标
package com.ss.dao;

import org.junit.Test;

import com.ss.pojo.User;
/**
 * 被切入的类
 * @author Administrator
 *
 */
public class Dao implements IDao{
	@Test
	public void test(){
//		System.out.println(1/0);
		System.out.println("daotest");
		
	}
	
}
  1. 调用测试
package com.ss.service;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ss.dao.Dao;
import com.ss.dao.IDao;
public class Service {
	@Test
	public void test(){
		// 初始化容器
		ApplicationContext ctx = new ClassPathXmlApplicationContext("container.xml");
		// 从容器中获取对象
		IDao dao = (IDao)ctx.getBean("dao");
		// 调用方法
		dao.test();
	}
}

控制台输出
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值