AOP (Aspect Oriented Programming)面向切面编程,是对OOP (Object Oriented Programming)面向对象编程很好的补充,可以在不改变原始目标原型的情况下,动态地添加通用逻辑,完成业务逻辑和通用处理分离,实现解耦和利于扩展。
首先看下手动方式,没有使用AOP代理:
车辆接口:
public interface Vehicle {
void info();
}
汽车类:
public class Car implements Vehicle {
private String name;
private String price;
public void setName(String name) {
this.name = name;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public void info() {
System.out.println("Car name: " + name + ", price: " + price);
}
}
代理类:
public class CarManualProxy {
private Car car;
public void setCar(Car car) {
this.car = car;
}
public void sell() {
car.info();
System.out.println("Give 200 maintenance coupon via manual way");
}
}
Spring配置文件beans-manual-proxy.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName">
<bean id="car" class="com.john.spring.aop.Car">
<property name="name" value="Superb" />
<property name="price" value="220000" />
</bean>
<bean id="carManualProxy" class="com.john.spring.aop.CarManualProxy">
<property name="car" ref="car" />
</bean>
</beans>
测试:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "beans-manual-proxy.xml" });
CarManualProxy carProxy = (CarManualProxy) ctx.getBean("carManualProxy");
carProxy.sell();
}
输出:
Car name: Superb, price: 220000
Give 200 maintenance coupon via manual way
分享到:
相关推荐
总的来说,Spring AOP提供了一种优雅的方式来处理横切关注点,使得业务代码更专注于核心功能,提高了代码的可读性和可维护性。通过源码学习和实际操作,我们可以更好地理解和利用这一强大的特性。
5. **代理(Proxy)**:Spring AOP 使用动态代理技术创建对象,有两种代理方式:JDK 动态代理和 CGLIB 代理。前者适用于接口实现类,后者适用于没有接口的类。 6. **注解使用**:如 @Aspect、@Before、@After、@...
1. aopalliance-1.0.jar:这是一个非常基础的AOP库,定义了AOP的核心接口,如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.aop.Advice`,这些接口为不同的AOP框架提供了统一的交互方式。Spring...
总的来说,Spring AOP通过XML配置为我们提供了一种灵活的方式来管理横切关注点,使我们的代码更加模块化和可维护。通过定义Advisor、切点和通知,我们可以将如日志记录、事务处理等通用功能轻松地插入到业务逻辑中,...
- **自动模式**:指的是Spring AOP的自动代理创建功能,即不需要手动指定代理对象,而是通过配置自动创建。 - **AbstractAutoProxyCreator**:一个抽象类,它实现了自动创建代理对象的逻辑。 - **...
通常,Spring框架的依赖管理会自动包含Spring AOP,但为了确保,可以手动添加如下依赖: ```xml <groupId>org.springframework <artifactId>spring-aop <version>5.3.18</version> <!-- 使用最新版本 --> `...
在提供的压缩包文件"springAOP"中,可能包含了以下内容: - **切面类(Aspect Class)**:包含切点和通知的Java类,可能使用了`@Aspect`注解。 - **目标类(Target Class)**:被AOP代理的对象,通常包含业务逻辑。...
在这个名为"springAOP-dome"的实例中,我们将探讨如何利用Spring AOP实现一个简单的日志记录功能,以作为入门学习。 首先,了解AOP的基本概念是必要的。面向切面编程是一种编程范式,旨在解决程序中的横切关注点,...
AnnotationAwareAspectJAutoProxyCreator类是Spring AOP用来创建代理对象的核心组件之一。它通过扫描类上标注了特定AOP注解的类(如@Aspect)并根据这些信息来创建代理对象。当容器中的bean需要创建时,...
静态代理是实现AOP的一种基本方式,但它的局限性在于必须为每个被代理的目标类手动创建一个代理类。以下是一个简单的静态代理示例: ```java public interface Service { void execute(); } public class ...
一开始我对spring AOP还是属于一知半解的状态,这几天遇到一个问题,加上又查看了一些Spring相关知识,感觉对这个问题有了更深刻的认识。所以写下来分享一下。 我们知道,Spring支持多种AOP方式,Spring自己的基于...
在IT行业中,Spring框架无疑是Java开发领域的中流砥柱,而Spring AOP则是其核心组件之一。本资料包"spring-aop-4.2.6.RELEASE.zip"正是针对Spring AOP的一个重要版本,它与"spring-framework.zip"一同构成了强大的...
Spring框架中的AOP模块是实现这一模式的关键。本篇文章将详细探讨如何通过Java的动态代理机制来模拟Spring AOP的核心概念。 首先,让我们了解什么是动态代理。在Java中,动态代理主要由`java.lang.reflect.Proxy`类...
例如,可能会有一个自定义的MyBatis拦截器用于分页查询,一个Spring AOP切面用于记录操作日志,Spring事务管理确保数据的一致性,而反射工具类可能用于动态加载配置或处理某些通用的反射任务。通过这些组件的组合,...
在Spring AOP中,切面通常由一个或多个通知(advice)和一个切入点(pointcut)定义组成。 2. **通知(Advice)**:通知是在特定连接点执行的代码,它是切面实际行为的实现。Spring AOP支持五种类型的通知: - ...
Spring AOP,全称Spring面向切面编程,是Spring框架中的一个重要组成部分,它提供了一种在不修改原有代码的情况下,对程序进行功能增强的技术。在实际开发中,我们经常使用AOP来处理如日志记录、事务管理、权限校验...
总的来说,Spring AOP提供了一种优雅的方式,让我们可以将关注点分离,专注于业务逻辑的实现,而将诸如日志、事务等通用功能作为切面进行统一管理。通过XML配置或注解方式,我们可以轻松地定义、应用和管理这些切面...
首先,Spring AOP是Spring框架的一个核心特性,它允许开发者在不修改源代码的情况下,对应用程序的特定部分进行横切关注点的添加,如日志记录、事务管理或性能监控。AOP通过定义切面(Aspect)和通知(Advice)来...
面向切面编程(Aspect-Oriented Programming,简称AOP)是Spring框架的重要特性之一,它通过将业务逻辑中的横切关注点(Cross-cutting Concerns)与核心业务逻辑分离来提高代码的可维护性和可扩展性。在Spring框架中...