Spring中 目标对象?
在Spring框架中,"目标对象"(Target Object)通常指的是被代理的对象。在AOP(面向切面编程)中,目标对象是指那些被增强(如添加横切关注点,例如日志、事务管理等)的业务逻辑对象。
代理对象:在AOP中,Spring会创建一个代理对象来包装目标对象。这个代理对象会拦截对目标对象的方法调用,并在调用之前或之后执行一些额外的逻辑(如切面中的通知)。
切面:切面是一个模块,它包含了横切关注点的代码,比如日志记录、事务管理等。切面可以定义在哪些方法上应用这些横切关注点。
通知:通知是切面中的具体实现,它定义了在特定的连接点(如方法调用)上执行的操作。常见的通知类型包括前置通知、后置通知、异常通知等。
连接点:连接点是程序执行的一个点,通常是方法的调用。AOP允许在这些连接点上插入额外的逻辑。
假设有一个简单的服务类:
public class UserService {
public void addUser() {
// 添加用户的逻辑
}
}
在这个例子中,UserService
就是目标对象。如果我们想在addUser
方法执行前后记录日志,我们可以定义一个切面和通知:
@Aspect
public class LoggingAspect {
@Before("execution(* UserService.addUser(..))")
public void logBefore() {
System.out.println("Before adding user");
}
@After("execution(* UserService.addUser(..))")
public void logAfter() {
System.out.println("After adding user");
}
}
在这个例子中,UserService
是目标对象,而LoggingAspect
是切面,logBefore
和logAfter
是通知。Spring会创建一个代理对象来拦截对addUser
方法的调用,并在调用前后执行日志记录的逻辑。
目标对象是Spring AOP中的一个重要概念,它是被增强的对象。通过代理机制,Spring能够在不修改目标对象代码的情况下,添加额外的功能。