spring.aop.auto=true spring.aop.proxy-target-class=true 有什么用
时间: 2024-04-29 22:20:41 浏览: 190
这两个配置项都是与 Spring AOP(面向切面编程)有关的。
- `spring.aop.auto=true` 表示开启自动代理功能,Spring 会自动为被 `@Aspect` 注解的切面类创建代理对象。
- `spring.aop.proxy-target-class=true` 表示使用 CGLIB 代理方式,即对类进行代理而非接口,这样可以解决无法代理非接口类型的类的问题。
综合起来,这两个配置项的作用是开启自动代理功能并使用 CGLIB 代理方式来为切面类创建代理对象。这能够使得切面类中定义的切点、通知等功能生效,从而实现面向切面编程。
相关问题
<aop:aspectj-autoproxy proxy-target-class="true"/>
这是一个 Spring AOP 的配置,在这个配置中,proxy-target-class 属性被设置为 true,意味着 Spring 会使用 CGLIB 动态代理代替 JDK 动态代理来生成 AOP 代理对象。
在前面代码的基础上,修改beans.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" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <context:component-scan base-package="com.ex06.tools.impl,com.ex06.aspectj"/> <aop:aspectj-autoproxy proxy-target-class="true"/> </beans> 根据beans.xml文件中配置信息的变化,在ToolUpkeep类中添加注解信息,但需要保持切面、切入点配置不变。同时根据beans.xml文件中配置信息的要求,在项目中其他位置添加注解信息。
我理解您的问题是要求根据修改后的beans.xml文件,在ToolUpkeep类中添加注解信息,并在项目中其他位置添加注解信息。同时需要保持切面、切入点配置不变。
在ToolUpkeep类中添加注解信息:
根据beans.xml文件中的配置信息,我们可以得知需要进行组件扫描,因此我们可以在ToolUpkeep类上添加@Component注解,表示这是一个组件。
同时需要保持切面、切入点配置不变,因此我们在ToolUpkeep类上使用@Aspect注解,使之成为切面类,并使用@Pointcut注解定义切入点。
代码如下:
```
@Component
@Aspect
public class ToolUpkeep {
@Pointcut("execution(public void com.ex06.tools.impl.Tool.add(..))")
public void toolAdd() {}
@Before("toolAdd()")
public void beforeToolAdd() {
System.out.println("即将添加工具");
}
@After("toolAdd()")
public void afterToolAdd() {
System.out.println("添加工具成功");
}
}
```
在项目中其他位置添加注解信息:
根据beans.xml文件中的配置信息,我们可以得知需要进行组件扫描,因此我们需要在其他需要被扫描的组件上添加@Component注解。
同时我们需要保持切面、切入点配置不变,因此我们需要在其他需要被切入的方法上添加相应的注解,如@Before、@After等。
代码如下:
```
@Component
public class OtherComponent {
public void foo() {
System.out.println("执行foo方法");
}
@Before("toolAdd()")
public void beforeToolAddOther() {
System.out.println("其他位置-即将添加工具");
}
@After("toolAdd()")
public void afterToolAddOther() {
System.out.println("其他位置-添加工具成功");
}
}
```
请注意,上述代码中,我们使用了与ToolUpkeep类相同的@Pointcut注解来定义切入点,保持了切面、切入点配置的一致性。
同时,在OtherComponent类中,我们使用了@Before和@After注解来定义切面的切入点和切面逻辑,并且我们使用了与ToolUpkeep类相同的切入点,保持了切入点的一致性。
阅读全文