Spring AOP(一、xml文件配置实现)

在Xml配置AOP有两种实现方式:一、基于代理实现AOP切面编程;二、通过自动代理实现AOP切面编程

项目结构

其中,StudentsDAOImpl.java为切面类

一、基于代理实现AOP切面编程

StudentsDAOImpl.java

package com.pro.proxy;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

public class StudentsDAOProxy implements MethodBeforeAdvice,AfterReturningAdvice{

	@Override
	public void afterReturning(Object returnValue, Method method,
			Object[] args, Object target) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("执行方法之后");
	}

	@Override
	public void before(Method method, Object[] args, Object target)
			throws Throwable {
		// TODO Auto-generated method stub
		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"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	
	<!-- 基于代理的AOP实现 -->
	<!-- 1.定义实现类bean -->
	<bean id="studentsDaoImpl" class="com.pro.vo.StudentsDAOImpl"></bean>
	
	<!-- 2.定义代理类 -->
	<bean id="studentsDaoProxy" class="com.pro.proxy.StudentsDAOProxy"></bean>
	
	<!-- 3.定义切入点 -->
	<bean id="studentsDaoPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
		<property name="pattern" value=".*Students"/>
	</bean>
	
	<!-- 4.定义通知 -->
	<bean id="studentsDaoAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
		<property name="advice" ref="studentsDaoProxy"/>
		<property name="pointcut" ref="studentsDaoPointCut"/>
	</bean>
	
	<!-- 5.定义代理工厂 -->
	<bean id="studentsDaoFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="target" ref="studentsDaoImpl"></property>
		<property name="interceptorNames" value="studentsDaoAdvisor"></property>
		<property name="proxyInterfaces" value="com.pro.dao.StudentsDAO"></property>
	</bean>
</beans>
测试类test.java

package com.pro.test;

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

import com.pro.dao.StudentsDAO;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		StudentsDAO sDao = (StudentsDAO) ctx.getBean("studentsDaoFactory");  //获取代理工厂Bean
		sDao.saveStudents();
	}

}

二、自动代理的AOP实现

StudentsDAOProxy.java与上面一样

但是 在applicationContext.xml中稍有改动

applcationContext.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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
	
	<!-- 自动代理的AOP实现 -->
	<!-- 1.定义实现类bean -->
	<bean id="studentsDaoImpl" class="com.pro.vo.StudentsDAOImpl"></bean>
	
	<!-- 2.定义代理类 -->
	<bean id="studentsDaoProxy" class="com.pro.proxy.StudentsDAOProxy"></bean>
	
	<!-- 3.定义支持正则表达式的通知 -->
	<bean id="studentsDaoAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
		<property name="advice" ref="studentsDaoProxy"/>
		<property name="pattern" value=".*Students"></property>
	</bean>
	<!-- 4.声明支持自动代理 -->
	<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>
	
</beans>
测试类test.java

package com.pro.test;

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

import com.pro.dao.StudentsDAO;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		StudentsDAO sDao = (StudentsDAO) ctx.getBean("studentsDaoImpl");//获取实现累的bean
		sDao.saveStudents();
	}

}


相比较,自动代理实现的AOP会比基于代理实现的AOP会方便很多

源码下载 点击打开链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值