`
sunjiesh
  • 浏览: 100505 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring AOP概念学习(三)-自动代理

阅读更多

    上一篇文章是Spring AOP的单独代理,这一篇是关于Spring AOP的自动代理。其中的原理没必要多说,Spring AOP可以通过两种方式实现自动代理。下面就是分别介绍这两种方式。

    1、使用 BeanNameAutoProxyCreator

         1)首先创建Bean类

 

package com.javaeye.sunjiesh.proxy.auto;

public class HelloBeanA {

	public void testHelloBeanA(){
		System.out.println(this.getClass().getName()+" is running");
	}
}

 

package com.javaeye.sunjiesh.proxy.auto;

public class HelloBeanB {

	public void testHelloBeanB(){
		System.out.println(this.getClass().getName()+" is running");
	}
}
 

         2)创建Advice类

 

package com.javaeye.sunjiesh.aop;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;

public class AfterAdviceBean implements AfterReturningAdvice{

	public AfterAdviceBean() {
		// TODO Auto-generated constructor stub
	}

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

}

 

package com.javaeye.sunjiesh.aop;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class BeforeAdviceBean implements MethodBeforeAdvice{

	public BeforeAdviceBean() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public void before(Method method, Object[] args, Object target)
			throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("before is running");
	}

}
 

         3)创建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:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="helloBeanA" class="com.javaeye.sunjiesh.proxy.auto.HelloBeanA"></bean>
	<bean id="helloBeanB" class="com.javaeye.sunjiesh.proxy.auto.HelloBeanB"></bean>
	<bean id="beforeAdvice" class="com.javaeye.sunjiesh.aop.BeforeAdviceBean"></bean>
	<bean id="afterAdvice" class="com.javaeye.sunjiesh.aop.AfterAdviceBean"></bean>
	
	<!-- 在此进行自动代理配置 -->
	<bean id="beanNameAutoProxyCreator"
		class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
		<property name="beanNames">
			<list>
				<value>helloBean*</value>
			</list>
		</property>
		<property name="interceptorNames">
			<list>
				<value>beforeAdvice</value>
				<value>afterAdvice</value>
			</list>
		</property>
	</bean>
</beans>
 

         4)创建测试类

 

package com.javaeye.sunjiesh.proxy.auto;

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

public class SpringAopMain {

	public SpringAopMain() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"spring-beans3.xml");
		HelloBeanA h1 = (HelloBeanA) ctx.getBean("helloBeanA");
		h1.testHelloBeanA();
		HelloBeanB h2 = (HelloBeanB) ctx.getBean("helloBeanB");
		h2.testHelloBeanB();
	}

}
 

         5)输出

 

before is running
com.javaeye.sunjiesh.proxy.auto.HelloBeanA is running
afterReturning is running
before is running
com.javaeye.sunjiesh.proxy.auto.HelloBeanB is running
afterReturning is running
 

    2、使用 DefaultAdvisorAutoProxyCreator

        只要修改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:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
	<bean id="helloBeanA" class="com.javaeye.sunjiesh.proxy.auto.HelloBeanA"></bean>
	<bean id="helloBeanB" class="com.javaeye.sunjiesh.proxy.auto.HelloBeanB"></bean>
	<bean id="beforeAdvice" class="com.javaeye.sunjiesh.aop.BeforeAdviceBean"></bean>
	<bean id="afterAdvice" class="com.javaeye.sunjiesh.aop.AfterAdviceBean"></bean>
	
	<!-- 在此进行自动代理配置 -->
	<bean
		class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />
	<bean id="nameMatchMethodPointcutAdvisor"
		class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
		<property name="advice" ref="beforeAdvice" />
		<property name="mappedNames">
			<list>
				<value>test*</value>
			</list>
		</property>
	</bean>
</beans>
0
1
分享到:
评论

相关推荐

    死磕Spring之AOP篇 - Spring AOP两种代理对象的拦截处理(csdn)————程序.pdf

    在 Spring AOP 的自动代理创建过程中,`AbstractAutoProxyCreator` 类起着关键作用。它实现了 `BeanPostProcessor` 接口,会在 Bean 初始化后对其进行处理,生成代理对象。`AbstractAutoProxyCreator` 会查找 Spring...

    应用Spring AOP(五)-------XML配置方式

    在实际项目中,还可以结合Spring的其他功能,如自动代理创建、注解驱动的AOP等,来进一步提高开发效率和代码质量。对于更复杂的需求,可以深入学习Spring AOP的源码,理解其底层实现机制,以便更好地利用这一强大...

    spring-boot aop

    6. **配置自动代理**:在某些情况下,可能需要自定义代理创建或禁用某些特性。可以通过`@EnableAspectJAutoProxy`注解在配置类中启用AspectJ支持,并调整其属性。 7. **调试与测试**:确保在测试中正确配置了AOP,...

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    - **自动模式**:指的是Spring AOP的自动代理创建功能,即不需要手动指定代理对象,而是通过配置自动创建。 - **AbstractAutoProxyCreator**:一个抽象类,它实现了自动创建代理对象的逻辑。 - **...

    spring之AOP(动态代理)

    然而,如果需要更精细的控制,可以通过`@EnableAspectJAutoProxy`注解开启基于AspectJ的自动代理支持,或者通过`proxyTargetClass`属性来强制使用CGLIB代理。 总结一下,Spring的AOP机制通过JDK动态代理和CGLIB动态...

    spring-aop-aspectj-case

    标题“spring-aop-aspectj-case”涉及到...综上所述,这个主题涵盖了Spring框架中的AOP概念,AspectJ的特性,以及两者的集成应用。通过深入理解和实践,开发者可以更好地管理和组织代码,提高系统的可维护性和灵活性。

    Spring-AOP-JDK动态代理

    Spring AOP通过代理模式实现了这一概念,允许开发者在不修改源代码的情况下插入额外的功能。 JDK动态代理是Java提供的一种创建代理对象的方式,它在运行时根据接口生成一个实现了这些接口的代理类。Spring AOP可以...

    AOP.rar-Spring-AOP源码Demo

    在本"Spring-AOP源码Demo"中,我们将深入探讨Spring AOP的工作原理以及如何通过源码学习其核心概念。 1. **AOP的基本概念** - **切面(Aspect)**:AOP的核心单元,它封装了横切关注点,包括通知(advice)、切入...

    spring-aop.jar

    在spring-aop.jar中,`org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator`类负责自动创建代理并织入切面。 三、Spring AOP的使用 在实际应用中,我们可以利用Spring AOP进行日志记录、...

    spring-aop-aroud-demo.zip

    在本示例中,我们探讨的是如何在Spring Boot项目中使用Spring AOP(面向切面编程)实现环绕通知,以自动记录日志的功能。Spring AOP是Spring框架的一部分,它允许我们在不修改源代码的情况下,对应用程序进行横切...

    Spring AOP实现机制

    AOP概念 - **切面(Aspect)**:切面是关注点的模块化,通常包括业务逻辑与横切关注点,如日志、安全检查等。 - **通知(Advice)**:通知是切面在特定连接点上执行的行为,如方法调用前、后、异常时等。 - **连接...

    spring aop4.3.10

    6. **自动代理(Auto-proxy)**:Spring提供自动代理机制,可以通过配置或注解来自动识别哪些bean应该被代理。`@EnableAspectJAutoProxy`注解可以开启基于AspectJ的自动代理。 7. **注解驱动的AOP**:从Spring 2.5...

    SpringAop学习笔记以及实现Demo

    **Spring AOP 学习笔记及实现Demo** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架中的一个重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。AOP的主要目的...

    Spring的AOP依赖包-AspectJ

    Spring与AspectJ的整合还提供了自动代理生成功能。当启用AspectJ注解驱动的AOP(`@EnableAspectJAutoProxy`),Spring会自动创建代理对象来处理通知。此外,还可以通过`@AspectJSupport`和`&lt;aop:aspectj-autoproxy&gt;`...

    Spring AOP学习资料(pdf)

    #### 三、Spring AOP 的关键概念 **1. Aspect (切面)** - 定义:用来描述横切关注点的模块化,比如日志记录、事务管理等。 **2. Advice (通知)** - 定义:在切面中的具体实现,即在特定的连接点上所执行的代码。 -...

    spring AOP 引入jar包,spring IOC 引入Jar包

    5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...

    spring aop spring aop

    5. **代理(Proxy)**:Spring AOP通过动态代理机制创建目标对象的代理,代理对象在调用目标方法时会自动插入切面逻辑。在Java项目中,Spring可以使用JDK动态代理或CGLIB动态代理来创建代理对象。 在实际应用中,...

    Spring AOP完整例子

    Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。

    spring aop所需jar包

    - 自动代理:Spring会根据配置自动生成代理对象,透明地处理切面逻辑。 7. **最佳实践**: - 尽量减少切面的粒度,避免过多的切面导致系统复杂性增加。 - 切面应该具有高度的重用性和独立性,避免与具体业务逻辑...

    Spring AOP 概念理解及@AspectJ支持

    **Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过定义“切面”来模块化横切关注点,比如日志、事务管理、性能监控等。在传统的...

Global site tag (gtag.js) - Google Analytics