Struts 2 和 Spring 如何处理 struts 创建的对象
Struts 2 and Spring how struts-created objects handled
我们正在使用 Struts 2 和 spring 框架工作 4 (https://struts.apache.org/docs/spring-plugin.html)。我有一些关于 Struts bean 创建的问题。
当我们将Struts与Spring一起使用时,我们可以轻松地在[=16=中使用spring@Inject
、@Value
、@Resource
], Validators
和 Interceptors
, 没有 将它们中的任何一个注释为 @Component
(或 @Named
).这个 似乎 struts 创建的对象是 spring 托管 bean。
这不是真的,因为当您查看 applicationContext.getBeanDefinitionNames()
时,您找不到任何操作、验证器或拦截器。
因此,如果 Struts 创建的对象不是 spring 管理 beans,为什么 spring 注释(@Inject
、@Value
、...)工作得很好吗?
技术上是否可以创建一个新对象(在 spring 启动后)并将其传递给 Spring 并让 Spring 设置它?怎么办?!
Struts 使用 ObjectFactory
构建任何对象,如动作、拦截器、验证器等:
ObjectFactory
is responsible for building the core framework objects. Users may register their
own implementation of the ObjectFactory
to control instantiation of these Objects.
Struts-Spring plugin注册自己的对象工厂StrutsSpringObjectFactory
:
Struts object factory that integrates with Spring.
在那里,它覆盖了构建对象的方法,例如buildBean()
。
现在,如果您查看实现,它正在使用方法 org.springframework.beans.factory.config.AutowireCapableBeanFactory#createBean()
这通常会创建 clazz 参数的新实例。
Central method of this class: creates a bean instance,
populates the bean instance, applies post-processors, etc.
然后,新创建的实例通过 org.springframework.beans.factory.config.AutowireCapableBeanFactory#autowireBeanProperties()
自动装配
之后,这个实例被传递给Guice进行注入。
现在已经完全 烘烤 并准备好 return。
注意,如果 bean 由 Spring 管理,它使用应用程序上下文中的 getBean
方法,否则新实例总是由 struts-[=47= 创建] 插件,如果 bean 不是由 Spring.
管理的
我们正在使用 Struts 2 和 spring 框架工作 4 (https://struts.apache.org/docs/spring-plugin.html)。我有一些关于 Struts bean 创建的问题。
当我们将Struts与Spring一起使用时,我们可以轻松地在[=16=中使用spring@Inject
、@Value
、@Resource
], Validators
和 Interceptors
, 没有 将它们中的任何一个注释为 @Component
(或 @Named
).这个 似乎 struts 创建的对象是 spring 托管 bean。
这不是真的,因为当您查看 applicationContext.getBeanDefinitionNames()
时,您找不到任何操作、验证器或拦截器。
因此,如果 Struts 创建的对象不是 spring 管理 beans,为什么 spring 注释(@Inject
、@Value
、...)工作得很好吗?
技术上是否可以创建一个新对象(在 spring 启动后)并将其传递给 Spring 并让 Spring 设置它?怎么办?!
Struts 使用 ObjectFactory
构建任何对象,如动作、拦截器、验证器等:
ObjectFactory
is responsible for building the core framework objects. Users may register their own implementation of theObjectFactory
to control instantiation of these Objects.
Struts-Spring plugin注册自己的对象工厂StrutsSpringObjectFactory
:
Struts object factory that integrates with Spring.
在那里,它覆盖了构建对象的方法,例如buildBean()
。
现在,如果您查看实现,它正在使用方法 org.springframework.beans.factory.config.AutowireCapableBeanFactory#createBean()
这通常会创建 clazz 参数的新实例。
Central method of this class: creates a bean instance, populates the bean instance, applies post-processors, etc.
然后,新创建的实例通过 org.springframework.beans.factory.config.AutowireCapableBeanFactory#autowireBeanProperties()
之后,这个实例被传递给Guice进行注入。
现在已经完全 烘烤 并准备好 return。
注意,如果 bean 由 Spring 管理,它使用应用程序上下文中的 getBean
方法,否则新实例总是由 struts-[=47= 创建] 插件,如果 bean 不是由 Spring.