springboot 工具类 注入bean

本文介绍了如何在Spring Boot中避免因静态工具类注入Bean导致的null异常,通过@Component注解并使用@Autowired自动装配webAppDataProperties属性。提供了解决方案和使用方法实例。

因为工具类一般都是static的 所以普通的放入是有没有大用 会报null异常(被折磨了半天)

直接上解决方案

@Slf4j
@Component //一定要加这个注入
public class FileUtil {
    /**工具类注入bean
     * @author zhangjunrong
     * @date 2022/2/22 19:30
     */
    @Autowired
    private  WebAppDataProperties webAppDataProperties;

    private static FileUtil fileUtil ;
    @PostConstruct
    public void init() {
        fileUtil = this;
        fileUtil.webAppDataProperties= this.webAppDataProperties;

    }
}

使用方法:

fileUtil.webAppDataProperties.getMappingLocation()

### 解决Spring Boot测试中无法注入Bean的问题 在Spring Boot测试环境中遇到无法注入Bean的情况,通常是由于以下几个原因引起的: #### 1. 测试类未被识别为Spring上下文的一部分 如果测试类没有正确配置为Spring Test环境的一部分,则可能导致`@Autowired`失效。可以通过添加`@SpringBootTest`注解来确保整个应用上下文加载到测试环境中[^1]。 ```java @SpringBootTest public class MyTest { @Autowired private MyService myService; @Test public void testMyService() { assertNotNull(myService); } } ``` #### 2. 被注入的类不是Spring Bean 如果目标类未通过适当的方式注册为Spring Bean(例如缺少`@Component`、`@Service`或其他相关注解),则Spring容器将无法感知该类并完成依赖注入。因此,在定义需要注入的目标类时,应确保其已被标记为Spring管理的组件。 ```java @Service public class MyService { public String getMessage() { return "Hello from service"; } } ``` #### 3. 使用了不当的作用域或初始化方式 某些情况下,开发者可能会手动实例化对象而不是让Spring负责创建和管理这些对象。这种做法会绕过Spring的依赖注入机制,从而导致注入失败。始终建议由Spring框架控制Bean的生命期。 对于单元测试而非集成测试场景下,可以考虑使用Mockito等工具模拟依赖项的行为而不必实际加载完整的Spring Context: ```java @RunWith(MockitoJUnitRunner.class) public class UnitTestExample { @Mock private Dependency dependency; @InjectMocks private ClassUnderTest classUnderTest = new ClassUnderTest(); @Before public void setUp(){ MockitoAnnotations.initMocks(this); } @Test public void shouldDoSomethingWithDependency(){ when(dependency.someMethod()).thenReturn("mocked result"); assertEquals("expected behavior",classUnderTest.callingSomeMethod()); } } ``` 另外需要注意的是,随着版本迭代,不同版本间可能存在兼容性差异。比如按照官方公告指出的内容来看,未来可能不再继续维护2.x系列版本[^3]。所以在升级或者迁移项目的时候要特别留意所使用的具体库及其对应的最佳实践指南。 最后关于安全性方面,当涉及到用户身份验证等功能实现时,了解清楚当前采用的技术栈以及相应支持的安全特性是非常重要的。例如基于Servlet的传统风格应用与响应式编程模型下的WebFlux之间存在显著区别[^2]。这要求开发人员熟悉各自适用条件下推荐使用的安全防护措施和技术手段。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新生代农民工-小王八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值