Aware接口和@Autowired有什么不同

What is the different between Aware interface and @Autowired

在 Spring 中,我可以使用 Aware 接口获取 Spring 的对象:

@Component
class TestAware : ApplicationContextAware, EnvironmentAware {
    override fun setEnvironment(environment: Environment) {
        println("Server port" + environment.getProperty("server.port"))
    }

    override fun setApplicationContext(applicationContext: ApplicationContext) {
        println("ApplicationContext" + applicationContext.displayName)
    }
}

但是我可以使用@Autowired 做同样的事情:

@Component
class AutowiredTest {
    @Autowired
    fun constructor(env: Environment, appCtx: ApplicationContext) {
        println("ApplicationContext From Autowired" + appCtx.displayName)
        println(env.getProperty("server.port"))
    }

}

那么它们之间有什么区别,在哪些情况下我必须使用 Aware 而不是 @Autowired?

传统上,@Autowired 是核心依赖注入方法,首选在构造函数中注入将由所述对象使用的必要 bean。

知道,更具体地说,我想你的意思是 ApplicationContextAware 是吗?这意味着更高级的观点,因此实施 class 可以改变创建它的上下文。整个含义和方法是不同的。如果您需要另一个 bean 的功能,@Autowire 将它(注入)到 using class 中。如果您需要操纵您的上下文,例如引导其他 bean,根据整体注入的内容做出决策,那么这将是用于 Aware 的方法。

我没记错吗?