感觉之前写的那Spring配置中的AOP太繁琐了。现在小小的整理一下。
(1)在xml中的配置
<aop:config proxy-target-class="true">
<aop:aspect id="logsAspect" ref="recordLog">
<aop:pointcut expression="execution(* com.lrl.action.Login.userLogin(String)) and args(name)"
id="recordPoint" />//带参数了!
<aop:around method="recordLogs" pointcut-ref="recordPoint" />
</aop:aspect>
</aop:config>
(2)还可以在类中配置
//直接在方法上
@Around("execution(* com.lrl.action.Register.userRegister(String)) && args(name)")
public void recordLogs1(ProceedingJoinPoint jp, String name)
throws Throwable {
System.out.println("1234");
jp.proceed();
System.out.println(name);
}
//或者可以选择在外面定义切点
@Pointcut("execution(* com.lrl.action.Register.userRegister(String))")
public void reg(){};//切点名,任意的
@Around("reg() && args(name)")//里面包含了切点名和参数列表
public void recordLogs(ProceedingJoinPoint jp, String name)
throws Throwable {
System.out.println(name);
jp.proceed();
}
当然,一个通知可以有多个切点
@Pointcut("execution(* com.lrl.action.Register.userRegister(String))")
public void reg(){};//切点1
@Pointcut("execution(* com.lrl.action.Register.userLogin(String))")
public void login(){};//切点2
@Pointcut(" reg() || login()")//可以这样合并
public void combine(){};//合并切点
@Around("reg() || login()")//可以这样用!
//@Around("combine()")也可以这样用,效果是一样的!
public void recordLogs(ProceedingJoinPoint jp, String name)
throws Throwable {
System.out.println(name);
jp.proceed();
}
//这里还说明几点:
(1)ProceedingJoinPoint是针对于环绕通知的。
(2)JoinPoint是前置、后置等通知的
(3)xml中参数列表用and args(xxx),类中可以用 && args(xxx)或and args(xxx).
(4)返回值等的应用可以参考Spring配置那篇文章。(虽然阅读困难,但是将就一下把。呵呵)
(5)有说的不对的地方,请留言。没做过很大量的实验测试。见谅~以后会补充完善的
(6)注意:最好不要某个类的所有方法都进行AOP切入,否则有时候切入的是getter等方法的时候,其他页面需要数据,会导致为空!具体原因可能是内部机制,现在还不是很了解。以后了解补充!
分享到:
相关推荐
Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...
1. **创建Bean**:在Spring的配置文件(如`applicationContext.xml`)中定义你需要使用AOP的Bean。例如,你可能有一个名为`UserService`的服务类,它包含了业务逻辑,需要被AOP代理。 ```xml ``` 2. **定义切面**...
首先,我们需要一个配置类,它将启用Spring的AOP代理并声明我们的切面。在Java配置类中,我们可以使用`@EnableAspectJAutoProxy`注解来启用AOP支持。 ```java @Configuration @EnableAspectJAutoProxy public class...
4. **简化事务管理**:Spring AOP提供了一种声明式事务管理方式,通过简单的配置就可以实现复杂的事务规则,极大地减少了手动管理事务的工作量。 5. **增强可扩展性**:切面允许添加新的功能而不修改现有代码,这...
在Spring AOP中,我们可以使用注解或者XML配置来定义切面。例如,@Aspect注解用于声明一个类为切面,@Before、@After、@AfterReturning、@AfterThrowing和@Around用于定义不同的通知类型。切入点表达式使用一种类似...
3. **Spring AOP配置** - XML配置:在Spring的配置文件中定义切面、切入点表达式和通知。 - 注解配置:使用`@Aspect`、`@Pointcut`、`@Before`、`@After`等注解声明切面和通知。 4. **小实例详解** - 创建一个切...
Spring AOP是Spring框架中处理AOP的一种实现,它允许你通过在Spring的配置文件中使用<aop:config>元素来配置切面、通知以及切点。Spring AOP使用代理模式和动态代理技术来拦截方法调用,根据切点表达式匹配的方法会...
Spring AOP(面向切面编程)是Spring框架的核心特性,它作为面向对象编程(OOP)的一种补充,旨在解决业务处理过程中的横切关注点,例如日志记录、权限检查等。OOP关注的是对象的属性和行为,而AOP关注的是跨越多个...
在Spring框架中,从2.0版本开始支持两种方式来使用AOP:基于AspectJ注解的AOP以及基于XML配置的AOP。 4. 在Spring中启用AspectJ注解支持 要在Spring应用中使用AspectJ注解,需要在classpath下包含三个JAR文件:aop...
6. **配置AOP**:在Spring中,AOP可以通过XML配置或注解方式进行设置。XML配置中,我们需要定义<aop:config>,<aop:pointcut>,<aop:advisor>等元素。而注解方式则使用@EnableAspectJAutoProxy开启自动代理,然后在...
- **XML配置**:在Spring的配置文件中,使用`aop:config`标签开启AOP支持,然后通过`aop:pointcut`定义切入点,`execution()`表达式指定需要拦截的方法。例如,下面的配置会拦截`com.spong.demo03.UserServiceImpl`...
Spring AOP,全称Aspect-Oriented Programming(面向切面编程),是对传统Object-Oriented Programming(面向对象编程,OOP)的一种补充。在OOP中,为了实现共享行为,如日志、权限验证和事务管理,往往需要在多个类...
Spring AOP 编程 Spring AOP(Aspect-Oriented Programming,面向切面编程)是一种编程技术,它可以将横切关注点从核心业务逻辑中分离出来,提高系统的可维护性、可扩展性和灵活性。AOP 是 OOP 的补充和完善,可以...
- **配置方法**:Spring AOP可以通过XML配置文件、Java配置类以及注解等多种方式进行配置。 - **切入点(Pointcut)**:定义了通知将应用于哪些连接点的规则。 - **增强(Advice)**:在特定连接点执行的代码块,可以是...
总的来说,`AfterThrowing`通知在Spring AOP中起到了异常处理的补充角色,它让我们能够对方法抛出的异常进行定制化的处理。通过合理利用`AfterThrowing`,我们可以使代码更加整洁,同时增强系统的异常处理能力。在...
1. **配置文件**:在Spring的XML配置文件中声明切面,定义切点和通知。例如,使用`<aop:config>`标签来定义切面,`<aop:pointcut>`定义切点,`<aop:advisor>`或`<aop:aspect>`定义通知。 2. **切面类(Aspect)**:...
- 基于Spring AOP的事务管理使得事务的配置和管理更加灵活。 2. **Spring事务管理示例** - 下面是一个简单的Spring配置示例,展示了如何配置Hibernate SessionFactory以及事务管理器: ```xml <!-- Hibernate ...