spring 中的<aop:advisor>和<aop:aspect>有什么区别?

在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-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

<bean id="helloWorldService" class="cn.javass.spring.chapter6.service.impl.HelloWorldService"/>

<bean id="aspect" class="cn.javass.spring.chapter6.aop.HelloWorldAspect"/>

<bean id="beforeAdvice" class="cn.javass.spring.chapter6.aop.BeforeAdviceImpl"/>

<aop:config>

<aop:advisor pointcut="execution(* cn.javass..*.sayAdvisorBefore(..))"

advice-ref="beforeAdvice"/>

<aop:aspect ref="aspect">

<aop:before pointcut="execution(* cn.javass..*.sayBefore(..)) and args(param)"

method="beforeAdvice(java.lang.String)"

arg-names="param"/>

<aop:after-returning pointcut="execution(* cn.javass..*.sayAfterReturning(..))"

method="afterReturningAdvice"

arg-names="retVal"

returning="retVal"/>

<aop:after-throwing pointcut="execution(* cn.javass..*.sayAfterThrowing(..))"

method="afterThrowingAdvice"

arg-names="exception"

throwing="exception"/>

<aop:after pointcut="execution(* cn.javass..*.sayAfterFinally(..))"

method="afterFinallyAdvice"/>

<aop:around pointcut="execution(* cn.javass..*.sayAround(..))"

method="aroundAdvice"/>

<aop:declare-parents types-matching="cn.javass..*.IHelloWorldService+"

implement-interface="cn.javass.spring.chapter6.service.IIntroductionService"

default-impl="cn.javass.spring.chapter6.service.impl.IntroductiondService"/>

</aop:aspect>

</aop:config>

</beans>

java中例子1

@Test

public void testSchemaBeforeAdvice() {

System.out.println("======================================");

ApplicationContext ctx = new ClassPathXmlApplicationContext("chapter6/advice.xml");

IHelloWorldService helloworldService = ctx.getBean("helloWorldService", IHelloWorldService.class);

helloworldService.sayBefore("before");

System.out.println("======================================");

}

例子2

@Test

public void testSchemaAdvisor() {

System.out.println("======================================");

ApplicationContext ctx = new ClassPathXmlApplicationContext("chapter6/advice.xml");

IHelloWorldService helloworldService = ctx.getBean("helloWorldService", IHelloWorldService.class);

helloworldService.sayAdvisorBefore("haha");

System.out.println("======================================");

}

这里说明一下

所以“<aop:aspect>”实际上是定义横切逻辑,就是在连接点上做什么,“<aop:advisor>”则定义了在哪些连接点应用什么<aop:aspect>。Spring这样做的好处就是可以让多个横切逻辑(即<aop:aspect>定义的)多次使用,提供可重用性。

时间: 2024-08-11 05:27:28

spring 中的<aop:advisor>和<aop:aspect>有什么区别?的相关文章

spring中bean的作用域属性singleton与prototype的区别

1.singleton 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例.换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例.这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都将返回被缓存的对象实例,这里要注意的是singl

spring Aop中aop:advisor 与 aop:aspect的区别

转载:http://blog.csdn.net/u011710466/article/details/52888277 在spring的配置中,会用到这两个标签.那么他们的区别是什么呢? <bean id="testAdvice" class="com.myspring.app.aop.MyAdvice"/> //切面代码 使用<aop:aspect>配置时, 如果切面代码是自动注入的bean,那么<aop:aspect>的ref

JavaEE开发之Spring中的依赖注入与AOP编程

一.快速创建Mava管理的Spring工程 因为本篇博客是讨论关于Spring的东西,所以我们就不创建WebApp的工程了.我们使用Spring来快速的创建一个Maven管理的工程.如下所示找到File->New->Maven Project选项来创建一个新的Maven Project,具体如下所示: 下方我们选择创建一个简单的Maven工程,跳过模板的选择.上篇博客我们在创建Maven工程时,是没有选择下方这个选项的,然后我们选择了一个WebApp的模板.而本篇博客,我们不需要WebApp的

[JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此时需要通过接口getBean(Class<T> requiredType)来获取Bean: 如果该Bean找不到则抛异常:NoSu

(转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean> 此时需要通过接口getBean(Class<T> requiredType)来获取Bean: 如果该Bean找不到则抛异常:NoSu

spring中自定义注解(annotation)与AOP中获取注解

一.自定义注解(annotation) 自定义注解的作用:在反射中获取注解,以取得注解修饰的类.方法或属性的相关解释. package me.lichunlong.spring.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.R

spring中bean的作用域属性single与prototype的区别

http://blog.csdn.net/linwei_1029/article/details/18408363   1. 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例.换言之,当把一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例.这个单一实例会被存储到单例缓存(singleton c

Spring中@Resource与@Autowired、@Qualifier的用法与区别

1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null 值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下: 1 @Autowired() @Qualifier("baseDao&qu

Spring中的AOP(8)

Spring的传统AOP AOP:不是由Spring定义.AOP联盟的组织定义.Spring中的通知:(增强代码) 前置通知 org.springframework.aop.MethodBeforeAdvice* 在目标方法执行前实施增强 后置通知 org.springframework.aop.AfterReturningAdvice* 在目标方法执行后实施增强 环绕通知 org.aopalliance.intercept.MethodInterceptor* 在目标方法执行前后实施增强 异常