配置

切换为 Cglib

Proxy 动态代理是 jfinal AOP 的底层实现机制。proxy 模块需要运行在 JDK 环境之下,如果需要运行在 JRE 之下,可以添加如下配置来支持:

ProxyManager.me().setProxyFactory(new CglibProxyFactory());

面的配置将切换到 cglib 对 proxy 模块的实现,需要在 pom.xml 中添加其 maven 依赖:

<dependency>
   <groupId>cglib</groupId>
   <artifactId>cglib-nodep</artifactId>
   <version>3.2.5</version>
</dependency>

整合 Spring

整合 Dubbo

以下代码展示了如何通过 JFinal-AOP 实现对 SpringDubbo 的支持。JFinal-AOP 提供了一种灵活的依赖注入方式,并支持通过 AOP 进行与 SpringDubbo 的无缝整合。

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;

import com.litongjava.jfinal.aop.Aop;
import com.litongjava.jfinal.aop.AopManager;
import com.litongjava.jfinal.spring.SpringBeanContextUtils;

import lombok.extern.slf4j.Slf4j;

@Configuration
@Slf4j
public class SpringBeanContextConfig {

  @Autowired
  private ApplicationContext applicationContext;

  @PostConstruct
  public void myBean() {

    SpringBeanContextUtils.setContext(applicationContext);
    // 让 tio-boot的bean支持Autowired注解
    log.info("add Autowired");
    Aop.addFetchBeanAnnotation(Autowired.class);

    // 开启和spring的整合
    AopManager.me().setEnableWithSpring(true);
    // 开启整合Dubbot
    AopManager.me().setEnableDubbo(true);

  }
}

说明

  1. Spring 与 JFinal-AOP 整合: 在 myBean() 方法中,通过 SpringBeanContextUtils.setContext(applicationContext) 将 Spring 的 ApplicationContext 设置到 JFinal-AOP 中,确保 tio-boot 的 Bean 可以使用 @Autowired 注解进行依赖注入。

  2. 添加 Autowired 支持: Aop.addFetchBeanAnnotation(Autowired.class) 方法使得 tio-boot 的 Bean 可以识别 @Autowired 注解,启用 Spring 的依赖注入机制。

  3. 启用 Spring 与 Dubbo 整合: 通过 AopManager.me().setEnableWithSpring(true) 开启与 Spring 的整合,同时使用 AopManager.me().setEnableDubbo(true) 开启 Dubbo 的支持。

  4. JFinal-AOP 支持的依赖查找顺序: 依赖查找的顺序为:

    • 首先从 Spring 中查找所需的 Bean。
    • 如果 Spring 中不存在,则从 JFinal-AOP 容器中查找。
    • 最后查找 Dubbo 中的相关 Bean。

这种设计确保了在不同框架下的 Bean 查找逻辑更加灵活,并能够根据项目需求进行不同层次的依赖注入。

通过以上配置,您可以在项目中实现 SpringDubboJFinal-AOP 的无缝整合,使得各个框架的依赖注入机制能够协同工作,提升项目的开发效率。