代码一:接口和实现类
-
package
cn.itcast.server;
-
public
interface
IPersonService {
-
public
void
save(String name);
-
public
String getPersonName(Integer id);
-
public
void
update(String name,Integer id);
-
}
-
package
cn.itcast.server.impl;
-
import
cn.itcast.server.IPersonService;
-
public
class
PersonServiceBean2
implements
IPersonService {
-
public
String getPersonName(Integer id) {
-
System.out.println("这是getPersonName方法"
);
-
return
"xxx"
;
-
}
-
public
void
save(String name) {
-
-
System.out.println("这是save方法"
);
-
}
-
public
void
update(String name, Integer id) {
-
System.out.println("这是update方法"
);
-
}
-
}
代码二:拦截器的定义
-
package
cn.itcast.server;
-
import
org.aspectj.lang.ProceedingJoinPoint;
-
-
public
class
MyInteceptor2 {
-
public
void
doAccessCheck(){
-
System.out.println("这里输出的是前置通知 "
);
-
}
-
public
void
doAfterReturning(){
-
System.out.println("这里输出的是后置通知 "
);
-
}
-
public
void
doAfterReturn(){
-
System.out.println("这里输出的是最终通知"
);
-
}
-
public
void
doAfterThrowing(){
-
System.out.println("这里输出的是例外通知 "
);
-
}
-
public
Object doBasicProfiling(ProceedingJoinPoint pjp)
throws
Throwable{
-
-
System.out.println("进入方法"
);
-
Object result = pjp.proceed();
-
System.out.println("退出方法"
);
-
return
result;
-
}
-
}
代码三:配置文件
-
<?
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-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/aop
-
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
-
">
-
<
aop:aspectj-autoproxy
/>
-
-
<
bean
id
=
"myInteceptor2"
class
=
"cn.itcast.server.MyInteceptor2"
>
</
bean
>
-
<
bean
id
=
"personService2"
class
=
"cn.itcast.server.impl.PersonServiceBean2"
>
</
bean
>
-
<
aop:config
>
-
<
aop:aspect
id
=
"asp"
ref
=
"myInteceptor2"
>
-
-
-
<
aop:pointcut
id
=
"mycut"
expression
=
"execution(* cn.itcast.server.impl.PersonServiceBean2.*(java.lang.String,..) )"
/>
-
-
<
aop:before
pointcut-ref
=
"mycut"
method
=
"doAccessCheck"
/>
-
<
aop:after-returning
pointcut-ref
=
"mycut"
method
=
"doAfterReturning"
/>
-
<
aop:after-throwing
pointcut-ref
=
"mycut"
method
=
"doAfterThrowing"
/>
-
<
aop:after
pointcut-ref
=
"mycut"
method
=
"doAfterReturn"
/>
-
<
aop:around
pointcut-ref
=
"mycut"
method
=
"doBasicProfiling"
/>
-
</
aop:aspect
>
-
</
aop:config
>
-
</
beans
>
测试类:
-
package
junit.test;
-
import
org.junit.BeforeClass;
-
import
org.junit.Test;
-
import
org.springframework.context.ApplicationContext;
-
import
org.springframework.context.support.ClassPathXmlApplicationContext;
-
import
cn.itcast.server.IPersonService;
-
public
class
SpringAOPTest {
-
@BeforeClass
-
public
static
void
setUpBeforeClass()
throws
Exception {
-
}
-
@Test
public
void
interceptorTest(){
-
ApplicationContext ac = new
ClassPathXmlApplicationContext(
"beans.xml"
);
-
IPersonService ipersonService = (IPersonService) ac.getBean("personService2"
);
-
ipersonService.update("xxx"
,
2
);
-
ipersonService.save("xx"
);
-
ipersonService.getPersonName(2
);
-
}
-
}
分享到:
相关推荐
**Spring AOP 通过 XML 配置实现** 在软件开发中,面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种强大的设计模式,它允许我们把关注点分离到所谓的“切面”中,这些切面独立于业务逻辑,但又与业务...
**XML配置实现AOP通知** 在Spring中,我们可以使用XML配置来声明和定义AOP通知。首先,我们需要在Spring配置文件中启用AOP代理,通过`<aop:config>`标签开启: ```xml <aop:config> <!-- 配置将要织入的通知 --> ...
基于代理实现AOP切面编程 基于代理的AOP实现主要涉及到两种代理方式:JDK动态代理和CGLIB代理。Spring会根据目标对象是否实现了接口来选择合适的代理方式。 - **JDK动态代理**:如果目标对象实现了至少一个接口,...
Spring AOP提供了注解和XML两种方式来实现切面编程。注解方式更加简洁,易于理解和维护,适用于大多数情况。而XML配置方式则在复杂场景下更具灵活性,如需要动态调整切面配置时。在实际项目中,可以根据需求选择适合...
本篇文章将重点讲解如何通过XML配置方式在Spring中实现AOP。 首先,了解AOP的基本概念是必要的。AOP的核心是切面(Aspect),它封装了多个相关操作,形成了一个关注点。切点(Pointcut)定义了这些操作应用到何处,...
总结一下,Spring通过XML配置实现AOP切面编程,主要包括以下几个步骤: 1. 定义切面类,包含切面逻辑方法。 2. 在XML配置文件中声明切面类bean。 3. 使用`aop:config`定义切面的配置,包括切入点表达式和通知类型。 ...
无论是基于XML的AOP配置还是基于注解的AOP配置,其核心都是将横切关注点从业务逻辑中分离出来,从而实现更好的代码组织和管理。选择哪种配置方式取决于项目的具体需求和个人偏好。对于简单的项目或小型团队,基于...
总结来说,通过Spring的XML配置,我们可以定义连接点(方法)、切点(一组连接点)、通知(拦截器)和顾问(将切点与通知关联)来实现AOP。虽然XML配置相对繁琐,但它提供了一种灵活的方式来组织和管理切面逻辑。...
在Spring中实现AOP,我们需要在XML配置文件中定义以下几个部分: 1. **配置Spring容器**:首先,确保Spring的配置文件(如`applicationContext.xml`)已经包含了AOP的命名空间,通常添加如下: ```xml xmlns:aop=...
**XML方式实现AOP编程** 在软件开发中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高代码的可重用性和可维护性,通过将关注点分离,使得业务逻辑与横切关注点(如日志、事务...
标题 "SpringXML方式实现AOP demo" 涉及到的是使用Spring框架通过XML配置来实现面向切面编程(AOP)的知识。面向切面编程是Spring框架的一个核心特性,它允许开发者在不修改原有业务代码的情况下,对系统进行横切...
Spring注解AOP允许我们在不编写XML配置的情况下实现AOP功能。以下是一些关键的注解: 1. `@Aspect`:标记一个类为切面,这个类可以包含多个通知方法。 2. `@Before`:前置通知,方法会在目标方法执行前被调用。 3...
**AspectJ与Spring AOP简介** Aspect Oriented Programming(面向切面编程,简称AOP)是一种编程范式,旨在减少代码中的重复性,提高模块化程度。...在实际项目中,可以根据需求和性能要求选择合适的方式来实现AOP。
本教程将重点讲解如何通过XML配置来实现Spring AOP。 首先,我们要理解AOP的基本概念。AOP是一种编程范式,它允许开发者定义“切面”,这些切面可以包含业务逻辑的各个部分,比如日志、安全检查等。在运行时,这些...
本篇将主要讨论如何通过注解方式来实现AOP编程。 首先,我们需要了解Spring中的核心注解。`@Aspect`是定义一个切面的注解,通常会定义在一个独立的类上。这个类将包含切点(Pointcut)和通知(Advice)。 切点是...
本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、基于AspectJ的注解方式、基于XML的AOP配置以及基于Java的AOP配置。 1. 基于代理的实现 Spring的AOP支持两种代理类型:JDK动态代理和CGLIB代理。...
这个示例会帮助你理解如何在Spring框架中使用XML配置实现AOP,并提供了一种在不修改目标类代码的情况下,优雅地添加额外功能的方法。记住,正确理解和运用AOP能够极大地提升代码的可维护性和模块化程度。
XML配置是Spring AOP早期的主要实现方式,虽然现在有更简洁的注解式配置,但理解XML配置方式对于深入理解AOP原理仍然很有帮助。下面我们将详细探讨如何通过XML配置实现Spring AOP。 首先,我们需要在Spring配置文件...
本实例主要探讨的是使用XML配置的方式来实现AOP。XML配置虽然相比注解方式略显繁琐,但它提供了更大的灵活性,尤其是在需要对多个类或方法应用相同通知(Advice)时。 首先,我们需要在Spring的配置文件中启用AOP...
SpringMVC用XML方式实现AOP的方法示例 本文主要介绍了SpringMVC用XML方式实现AOP的方法示例,通过示例代码详细地介绍了如何使用XML方式来实现AOP。AOP(Aspect-Oriented Programming)是一种编程范式,它可以将横切...