You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3+Gradle下向Entity注入Service遇NPE问题求助

解决Spring Boot 3+ Gradle下Entity注入Service空指针问题

1. 补充AOP starter依赖

在Gradle构建脚本中添加spring-boot-starter-aop依赖,它会自动引入spring-aspects及配套的AOP基础设施,确保依赖链完整:

implementation 'org.springframework.boot:spring-boot-starter-aop'

2. 启用Load-Time Weaving(LTW)

使用Spring的运行时织入替代编译期AspectJ插件配置,有两种方式可选:

注解方式

在启动类上追加@EnableLoadTimeWeaving注解:

@SpringBootApplication
@EnableSpringConfigured
@EnableLoadTimeWeaving
public class UserServiceApplication {
    // ...
}

配置文件方式

在application.properties中添加以下配置:

spring.aop.proxy-target-class=true
spring.weaving.enabled=true

3. 确认依赖Bean的Spring管理状态

确保SomeService已被Spring容器托管,需为其添加@Service(或@Component)注解:

@Service
public class SomeService {
    // 业务逻辑实现
}

4. 优化@Configurable注解配置

简化@Configurable的参数配置,默认设置即可满足自动注入需求:

@Entity
@Getter
@Table(name = "usr")
@Configurable
public class User {
    @Transient
    @Autowired
    private SomeService service;
    // ...
}

核心原理说明

  • Load-Time Weaving(LTW)让Spring在类加载阶段动态织入AspectJ切面,无需手动配置编译期插件,完全符合你的需求。
  • @EnableSpringConfigured与@Configurable配合,允许Spring对非容器创建的对象(如JPA Entity,由EntityManager实例化)执行依赖注入。
  • @Transient注解避免JPA将service字段作为持久化属性处理,防止ORM映射异常。

内容的提问来源于stack exchange,提问作者Ludov Dmitrii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:57:14