谢邀
不得不说,这是一个有价值,并且也曾一度困惑我的问题。我也曾经一度怀疑,注入的目的是什么,为什么要注入,这样的问题。
首先,你需要先问这样一个问题: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 注入。
以上