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 的方法。
我没记错吗?
在 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 的方法。
我没记错吗?