Aware界面和@Autowired有什么不同

时间:2017-11-25 04:54:35

标签: spring spring-ioc

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

$datas = array_chunk(array_map('rtrim', file('./myFile.txt')), 5);

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

@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)
    }
}

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

1 个答案:

答案 0 :(得分:2)

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

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

我是否错过了这个标记?