BeanNameAutoProxyCreator通过匹配bean的id值来决定自动代理那些target。自动代理可以不用为每个目标对象制定advice。配置文件如下。
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">
<bean id="hello" class="cn.com.gan.spring.aop.ImpHello"></bean>
<bean id="loggera" class="cn.com.gan.spring.aop.LoggerAfter"></bean>
<bean id="loggerb" class="cn.com.gan.spring.aop.LoggerBefore"></bean>
<bean id="logger" class="cn.com.gan.spring.aop.loggerAdvisor"></bean>
<bean id="advisor"
class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="mappedName" value="s*n"></property>
<property name="advice">
<ref local="logger" />
</property>
</bean>
<bean id="regadvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="pattern" value=".*Again"></property>
<property name="advice" ref="logger"></property>
</bean>
<bean id="proxyhello" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>hello</value>
</property>
<property name="interceptorNames">
<list>
advisor
</list>
</property>
</bean>
</beans>
或者DefaultAdvisorAutoProxyCreator不清楚根据什么代理或者是全部代理
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd ">
<bean id="hello" class="cn.com.gan.spring.aop.ImpHello"></bean>
<bean id="loggera" class="cn.com.gan.spring.aop.LoggerAfter"></bean>
<bean id="loggerb" class="cn.com.gan.spring.aop.LoggerBefore"></bean>
<bean id="logger" class="cn.com.gan.spring.aop.loggerAdvisor"></bean>
<bean id="advisor"
class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
<property name="mappedName" value="s*n"></property>
<property name="advice">
<ref local="logger" />
</property>
</bean>
<bean id="regadvisor"
class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="pattern" value=".*Again"></property>
<property name="advice" ref="logger"></property>
</bean>
<bean id="proxyhello" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
</bean>
</beans>
分享到:
相关推荐
1. **JDK动态代理**:Spring在没有CGLIB库的情况下,会使用Java的反射API创建动态代理。动态代理类会实现目标接口,并在调用接口方法时插入通知。因此,使用JDK动态代理的目标类必须实现至少一个接口。 2. **CGLIB...
对于基于注解的配置,可以使用`@EnableAspectJAutoProxy`开启自动代理。 例如,以下是一个简单的切面类示例: ```java @Aspect @Component public class LoggingAspect { @Before("execution(* ...
- 自动代理:Spring会根据配置自动生成代理对象,透明地处理切面逻辑。 7. **最佳实践**: - 尽量减少切面的粒度,避免过多的切面导致系统复杂性增加。 - 切面应该具有高度的重用性和独立性,避免与具体业务逻辑...
在IT行业中,MyBatis、Spring AOP、Spring事务管理和反射工具类是常见的技术栈,它们在构建高效、灵活的企业级应用中起着至关重要的作用。以下是对这些知识点的详细阐述: 1. MyBatis拦截器(MyBatis Interceptor)...
使用Spring AOP,我们可以定义切面,通过注解或XML配置来指定切点和通知,然后Spring会自动处理代理的创建和通知的执行。这样,我们就可以在不改动业务代码的情况下,轻松实现横切关注点的管理和增强。 总的来说,...
2. 配置Spring容器,启用AspectJ自动代理,例如在XML配置中添加`<aop:aspectj-autoproxy />`。 3. 定义切面,包括切入点表达式和通知,可以使用AspectJ的注解或者XML配置。 4. 将切面类加入到Spring容器中。 总的来...
2. **动态代理**:为了解决静态代理的局限性,Spring提供了基于Java动态代理(JDK Proxy)和CGLIB的动态代理机制。在动态代理中,我们不再需要手动创建代理类,而是通过实现`InvocationHandler`接口创建一个代理对象...
前者使用Spring AOP的原生API,后者则使用AspectJ的自动代理机制。 2. **定义切面**: 使用`<aop:aspect>`元素创建一个切面。在其中,你可以定义ID、引用对应的bean以及包含通知的方法。 ```xml <aop:aspect id...
在压缩包`spring3_day02_aop`中,可能包含了Spring AOP的示例代码,包括切面类、配置文件以及运行示例,你可以通过学习这些代码加深对Spring AOP自动代理的理解。通过实际操作,你会发现Spring AOP使得编写和管理切...
当我们声明一个Bean为切面并配置通知时,Spring容器会在需要的时候自动创建AOP代理。当通过代理调用目标方法时,Spring会先执行通知,然后转发到实际的目标方法。这个过程称为拦截器链,每个通知相当于一个拦截器,...
Spring会自动创建相应的代理对象并应用切面。 通过以上步骤,我们完成了在XML中配置Spring AOP的基本流程。需要注意的是,尽管XML配置较为繁琐,但它提供了更细粒度的控制和可读性。随着Spring的发展,基于注解的...
如果目标对象没有实现接口,Spring会自动切换到CGLIB代理,这是一种基于字节码生成技术的代理方式,可以代理没有接口的类。 总的来说,Spring AOP的动态代理机制为我们提供了强大的功能,使得我们可以优雅地实现横...
"spring-aop.jar"包含了Spring AOP框架的核心类和接口,如org.springframework.aop.*包下的内容,它提供了基于代理的AOP实现。而"spring-aspects.jar"则包含了一些预定义的AspectJ切面,比如事务管理方面的支持。 ...
`aop:aspectj-autoproxy`是一个Spring配置元素,用于启用基于AspectJ的自动代理。如果`proxy-target-class`属性设置为`true`,Spring将使用CGLIB代理;如果为`false`,则使用JDK动态代理(前提是目标对象实现了至少...
【Spring AOP的静态代理和动态代理】 在软件开发中,代理模式是一种常见的设计模式,它允许我们在不修改原有对象的基础上,对对象的行为进行增强。代理模式的核心思想是通过代理对象来控制对原始对象(也称为委托...
- `<aop:aspectj-autoproxy>`元素用于在XML配置中启用@AspectJ切面的自动代理。 3. **编程方式创建代理**: - 使用`org.springframework.aop.aspectj.annotation.AspectJProxyFactory`可以手动创建基于@AspectJ的...
在Spring框架中,AOP(面向切面编程)是一种重要的编程模型,它允许开发者定义“切面”,这些切面可以包含业务逻辑的某个部分,例如日志、事务管理等,然后在运行时自动插入到合适的位置,无需在每个方法中重复编写...
Spring AOP通过代理模式来实现这一目标,提供了声明式和编程式两种方式。 二、Spring AOP的实现方式 1. 声明式AOP:基于XML配置或注解的方式定义切面,更简洁易用。 2. 编程式AOP:使用Spring的API直接创建和管理...