我们正在使用Struts 2和Spring框架4(https://struts.apache.org/docs/spring-plugin.html)。我对Struts bean创建有一些疑问。
当我们使用带有Spring的Struts时,可以很容易地在Actions、Validators和Interceptors中使用spring注释如
但实际上并不是这样,因为当您查看
那么,如果Struts创建的对象不是Spring管理的Bean,为什么Spring注释(如
技术上是否可能在Spring启动后创建新对象,并将其传递给Spring并让Spring设置它?如何操作?
当我们使用带有Spring的Struts时,可以很容易地在Actions、Validators和Interceptors中使用spring注释如
@Inject
,@Value
,@Resource
等,而无需将它们中的任何一个注释为@Component
(或@Named
)。这似乎表明struts创建的对象是由Spring管理的bean。但实际上并不是这样,因为当您查看
applicationContext.getBeanDefinitionNames()
时,找不到任何Action、Validator或Interceptor。那么,如果Struts创建的对象不是Spring管理的Bean,为什么Spring注释(如
@Inject
,@Value
等)也能够正常使用呢?技术上是否可能在Spring启动后创建新对象,并将其传递给Spring并让Spring设置它?如何操作?
class
属性对应于 Spring 配置中的id
属性。如果找不到,则该类将尝试像往常一样被创建,然后由 Spring 进行自动装配。 - Aleksandr M