前面主要介绍了如何通过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是Java开发中最流行的框架之一,它以依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)为核心,极大地简化了企业级应用的开发。 首先,我们需要理解什么是依赖注入。...
【Spring2.5】是Spring框架的一个版本,它是一个全面的Java企业级应用开发框架,强调依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)。在本项目中,Spring可能用于管理...
2. **方法安全** - 使用AOP(面向切面编程)模式实现安全代理,可以对方法调用进行安全控制。Spring Security 还提供了一种表达式语言,允许在配置中定义访问规则,实现对Web和方法访问的灵活控制。 **配置Spring ...
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...
这个库在很多场合被广泛使用,特别是在那些需要在运行时动态创建对象或增强已有对象功能的场景下,比如Spring AOP(面向切面编程)就是其中的一个典型应用。下面我们将深入探讨CGlib动态代理的相关知识点。 ### ...
它使用Spring的AOP(面向切面编程)和IoC(Inversion of Control,控制反转)特性,将业务逻辑和事务管理从基础设施代码中解耦出来。 5. **Spring框架的角色**:Spring框架在此起到了关键作用,它提供了POJO(Plain...
Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP)。DI允许开发者在运行时动态地管理对象及其依赖关系,而AOP则提供了模块化横切关注点(如日志、事务管理)的方式。 **2. SpringMVC** SpringMVC是Spring...
Java程序员所需要掌握的核心知识:集合框架,JVM机制,多线程与并发框架,网络协议,SpringIOC,SpringAOP,SpringMVC,SpringCloud,Dubbo,MySQL,分布式,微服务,高并发与高可用等。转载须知:转载请在文首注明...
1. AOP(面向切面编程):通过`advice`命令,可以在运行时动态插入代码,实现AOP功能。 2. OQL(Object Query Language):Arthas内置的查询语言,用于查询对象、类、集合等信息。 3. AScript:支持JavaScript和...
1. **Spring Framework**: 提供了依赖注入、AOP(面向切面编程)、事务管理等核心功能。 2. **Spring Boot Auto Configuration**: 根据类路径中的jar和存在的bean自动配置应用。 3. **Spring MVC**: 实现了Model-...
11. **Spring框架**:理解依赖注入(DI)和面向切面编程(AOP)的概念,熟悉Spring Boot和Spring Cloud的相关知识。 12. **其他**:可能还会涉及一些其他技术,如微服务、分布式系统、大数据处理、并发编程模型等,...
10. Spring/SpringMVC:介绍Spring框架的核心特性,包括IoC容器、AOP、事务管理、Spring MVC框架等。 11. SpringBoot/SpringCloud:SpringBoot简化了Spring应用的配置和部署,而SpringCloud则是云环境下微服务架构...
3. **Spring框架**:Spring提供了依赖注入(DI)和面向切面编程(AOP),简化了业务组件的管理。 4. **Hibernate**:作为ORM(对象关系映射)工具,用于数据库操作,将Java对象与SQL数据库表进行映射。 5. **EJB...
- **Spring框架**:依赖注入(DI)、AOP、事务管理等核心概念。 - **MyBatis**:持久层框架,动态SQL和映射文件的使用。 - **Maven或Gradle**:构建工具的使用和配置。 9. **数据库** - **SQL语句**:增删改查...
Interceptor 类似于 Java 中的 AOP(面向切面编程)的切面,它可以在特定的执行点(如 SQL 执行前、后或异常时)插入自定义的逻辑。通过实现 `org.apache.ibatis.interceptor.Interceptor` 接口并覆盖 `intercept` ...