`

spring aop编程(二)(转载)

阅读更多
前面主要介绍了如何通过xml实现aop编程,下面主要介绍如何通过@AspectJ来实现。
为了使@AspectJ 支持生效,
需要做以下步骤:
在xml中设置

<aop:aspectj-autoproxy/>


或者
在xml中加入
<bean class="org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator" />

声明 aspect

<bean id="myAspect" class="org.xyz.NotVeryUsefulAspect">

   <!-- configure properties of aspect here as normal -->

</bean>

 

package org.xyz;

import org.aspectj.lang.annotation.Aspect;

 

@Aspect

public class NotVeryUsefulAspect {

 

}

声明 pointcut


@Pointcut("execution(* transfer(..))")

public void transfer() {}



声明 advice


Before advice:

@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

  public void doAccessCheck() {

    // ...

  }

After returning advice:

@AfterReturning("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

  public void doAccessCheck() {

    // ...

  }

或者

@AfterReturning(
pointcut="com.xyz.myapp.SystemArchitecture.dataAccessOperation()",
returning="retVal")

public void doAccessCheck(Object retVal) {

    // ...

  }

After throwing advice:

@AfterThrowing("SystemArchitecture.dataAccessOperation()")

  public void doRecoveryActions() {

    // ...

  }

或者

@AfterThrowing(

    pointcut=" SystemArchitecture.dataAccessOperation()",

    throwing="ex")

  public void doRecoveryActions(DataAccessException ex) {

    // ...

  }

After (finally) advice:

@After("com.xyz.myapp.SystemArchitecture.dataAccessOperation()")

  public void doReleaseLock() {

    // ...

  }

Around advice:

@Around("com.xyz.myapp.SystemArchitecture.businessService()")

  public Object doBasicProfiling( ProceedingJoinPoint pjp) throws Throwable {

    // start stopwatch

    Object retVal = pjp.proceed();

    // stop stopwatch

    return retVal;

  }

Advice parameters:

@Before("com.xyz.myapp.SystemArchitecture.dataAccessOperation() &&" + "args(account,..)" )

public void validateAccount(Account account) {

  // ...

}

声明参数名称:

@Before(

   value="com.xyz.lib.Pointcuts.anyPublicMethod() && " +

         "@annotation(auditable)",

   argNames="auditable" )

public void audit(Auditable auditable) {

  AuditCode code = auditable.value();

  // ...



Advice 排序:

一般以声明的方法次序为先后

不同的 Advice ,通过实现 Ordered 接口,来排序



Introductions


用于引入新的接口

@Aspect

public class UsageTracking {

 

  @DeclareParents(value="com.xzy.myapp.service.*+",

                  defaultImpl=DefaultUsageTracked.class)

  public static UsageTracked mixin;

 

  @Before("com.xyz.myapp.SystemArchitecture.businessService() &&" +

          "this(usageTracked)")

  public void recordUsage(UsageTracked usageTracked) {

    usageTracked.incrementUseCount();

  }

 

}
分享到:
评论

相关推荐

    (转载)自己动手写一个spring

    Spring是Java开发中最流行的框架之一,它以依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心,极大地简化了企业级应用的开发。 首先,我们需要理解什么是依赖注入。...

    jsr168 portlet(struts2+spring2.5+hibernate3.3)(转载)

    【Spring2.5】是Spring框架的一个版本,它是一个全面的Java企业级应用开发框架,强调依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。在本项目中,Spring可能用于管理...

    Spring-Security-3应用的11个步骤.docx

    2. **方法安全** - 使用AOP(面向切面编程)模式实现安全代理,可以对方法调用进行安全控制。Spring Security 还提供了一种表达式语言,允许在配置中定义访问规则,实现对Web和方法访问的灵活控制。 **配置Spring ...

    springmybatis

    mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五...

    华为面试试题,很经典,转载

    【Spring】Spring框架是企业级应用开发的基石,面试可能围绕IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)展开,包括Bean管理、依赖注入、事务处理、Spring MVC、Spring Boot、Spring Data JPA...

    转载:cglib动态代理介绍(一)

    这个库在很多场合被广泛使用,特别是在那些需要在运行时动态创建对象或增强已有对象功能的场景下,比如Spring AOP(面向切面编程)就是其中的一个典型应用。下面我们将深入探讨CGlib动态代理的相关知识点。 ### ...

    不需要应用服务器的J2EE【转载】

    它使用Spring的AOP(面向切面编程)和IoC(Inversion of Control,控制反转)特性,将业务逻辑和事务管理从基础设施代码中解耦出来。 5. **Spring框架的角色**:Spring框架在此起到了关键作用,它提供了POJO(Plain...

    SSM整合,参考尚硅谷视频,转载笔记,非原创,侵权删

    Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP)。DI允许开发者在运行时动态地管理对象及其依赖关系,而AOP则提供了模块化横切关注点(如日志、事务管理)的方式。 **2. SpringMVC** SpringMVC是Spring...

    JavaCore:Java程序员所需要掌握的核心知识

    Java程序员所需要掌握的核心知识:集合框架,JVM机制,多线程与并发框架,网络协议,SpringIOC,SpringAOP,SpringMVC,SpringCloud,Dubbo,MySQL,分布式,微服务,高并发与高可用等。转载须知:转载请在文首注明...

    arthas命令总结(转载)

    1. AOP(面向切面编程):通过`advice`命令,可以在运行时动态插入代码,实现AOP功能。 2. OQL(Object Query Language):Arthas内置的查询语言,用于查询对象、类、集合等信息。 3. AScript:支持JavaScript和...

    本项目是基于SpringBoot的线上宠物物资购买系统,为个人毕业设计,未经允许禁止转载.zip

    1. **Spring Framework**: 提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能。 2. **Spring Boot Auto Configuration**: 根据类路径中的jar和存在的bean自动配置应用。 3. **Spring MVC**: 实现了Model-...

    Java面试题

    11. **Spring框架**:理解依赖注入(DI)和面向切面编程(AOP)的概念,熟悉Spring Boot和Spring Cloud的相关知识。 12. **其他**:可能还会涉及一些其他技术,如微服务、分布式系统、大数据处理、并发编程模型等,...

    Java 最常见 200+ 面试题全解析:面试必备.pdf

    10. Spring/SpringMVC:介绍Spring框架的核心特性,包括IoC容器、AOP、事务管理、Spring MVC框架等。 11. SpringBoot/SpringCloud:SpringBoot简化了Spring应用的配置和部署,而SpringCloud则是云环境下微服务架构...

    j2ee在线购物网实例源码

    3. **Spring框架**:Spring提供了依赖注入(DI)和面向切面编程(AOP),简化了业务组件的管理。 4. **Hibernate**:作为ORM(对象关系映射)工具,用于数据库操作,将Java对象与SQL数据库表进行映射。 5. **EJB...

    Java面试资料大集合

    - **Spring框架**:依赖注入(DI)、AOP、事务管理等核心概念。 - **MyBatis**:持久层框架,动态SQL和映射文件的使用。 - **Maven或Gradle**:构建工具的使用和配置。 9. **数据库** - **SQL语句**:增删改查...

    mybatis interceptor

    Interceptor 类似于 Java 中的 AOP(面向切面编程)的切面,它可以在特定的执行点(如 SQL 执行前、后或异常时)插入自定义的逻辑。通过实现 `org.apache.ibatis.interceptor.Interceptor` 接口并覆盖 `intercept` ...

Global site tag (gtag.js) - Google Analytics