springboot 成员变量_在使用springboot时,有哪些类需要注入,哪些类不需要呢?

谢邀

不得不说,这是一个有价值,并且也曾一度困惑我的问题。我也曾经一度怀疑,注入的目的是什么,为什么要注入,这样的问题。

首先,你需要先问这样一个问题:Spring 实现了什么,解决了什么问题?

众所周知,Spring 做的两个事情:Ioc,Aop。这两个特性里面,其实就是两个事;如果A类的,有成员变量B类,B由有成员变量C。就是A依赖B,B依赖C。实际上,是A依赖BCD,D依赖EFGH...更复杂的依赖。如果全部成员变量都需要自己手动去new的话,管理依赖实在太复杂。所以,把ABCDEFGH...这些组件全部交由Spring管理,然后用依赖注入。就省了自己new对象的这些过程。

Aop,Aop其实只是一个特性。我觉得,总体来讲就是,对象交由Spring管理的话,因为对象由Spring的动态代理。从而可以做相应的增强!Aop只是其中一个,其余还包括,注解Spring缓存,Spring的事物,甚至是监听器等等。Spring都有其便利的实现方式。但是实现的前提就是,注册为Spring的组件。也就是Service,Controller这些。

我觉得这两个,就是把Bean交由Spring管理,使用时再注入的主要原因。

再回到最原始的问题:

有哪些类需要注入,哪些类不需要呢?

假如,一个对象需要依赖Spring的其他依赖,或者Spring的特性,包括但不限于 Aop,事务,缓存等。甚至,如果你要读取Spring等配置文件里的内容,也需要将其交由Spring管理。在我来看其他情况,就没有必要交由Spring管理。

再举个需要交由Spring管理的例子吧:

比如,我现在写了一个向 阿里云OSS 上传文件的Client,OssClient,OssClient 需要接收的参数有 key_id,secret。这两个属性通过 @Value 注解从配置文件获取。这种情况,就需要将OssClient注册为Bean。然后通过 @Resource 注入。

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中,静态使用注入需要借助Spring提供的工具`ApplicationContextAware`。具体步骤如下: 1. 定义一个静态,实现`ApplicationContextAware`接口,重写`setApplicationContext()`方法。 ```java public class StaticClass implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { StaticClass.applicationContext = applicationContext; } public static Object getBean(String name) { return applicationContext.getBean(name); } } ``` 2. 在静态中定义一个静态成员变量`applicationContext`,用于保存ApplicationContext对象。 3. 在`setApplicationContext()`方法中,将ApplicationContext对象保存到静态成员变量`applicationContext`中。 4. 在静态中定义一个静态方法`getBean(String name)`,用于获取Bean实例。 5. 在静态方法中使用静态成员变量`applicationContext`获取Bean实例。 例如,我们要在静态使用`UserService`进行业务操作,可以使用如下代码: ```java public class StaticClass implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { StaticClass.applicationContext = applicationContext; } public static UserService getUserService() { return applicationContext.getBean(UserService.class); } } ``` 这样,我们就可以在静态使用注入的Bean实例了。注意,使用静态中的注入需要保证Spring容器已经启动,否则可能会出现空指针异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值