spring中什么时候需要注入bean(有哪些类需要注入,哪些类不需要呢)?

Spring中什么时候需要注入bean(有哪些类需要注入,哪些类不需要呢)?

不得不说,这是一个有价值,并且也曾一度困惑我的问题。我也曾经一度怀疑,注入的目的是什么,为什么要注入,这样的问题。
首先,你需要先问这样一个问题: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管理的例子:比如,我要在本地上传一个文件,需要一个文件路径,然而我的路径配置信息存放在配置文件中,这时该属性通过 @Value 注解从配置文件获取。这种情况,就需要将Consts(常量类)注册为Bean。然后通过 @Autowired注入。
.xml配置文件:

file:
  upload:
    dir: ${user.dir}/upload

常量类:

/**
 * 常量类
 * @author lj
 * @since 2022-04-30
 */
@Data
@Component
public class Consts {

    @Value("${file.upload.dir}")
    private String uploadDir;

}

图片上传工具:

/**
 * 图片上传工具
 * @author lj
 * @since 2022-04-30
 */
@Slf4j
@Component
public class UploadUtil {

    @Autowired
    Consts consts;

	...后续上传图片逻辑
}