当前位置: 首页 > 面试题库 >

Struts 2和Spring如何处理Struts创建的对象

万乐逸
2023-03-14
问题内容

我们在弹簧框架4(https://struts.apache.org/docs/spring-
plugin.html
)中使用Struts 2
。我对Struts bean的创建有一些疑问。

当我们使用Struts和Spring,我们可以很容易地采用弹簧@Inject@Value@ResourceActionsValidators并且Interceptors
没有 注释其中的任何@Component(或@Named)。这 似乎 是支柱创建的对象是Spring管理豆。

这是不正确的,因为当您查看时applicationContext.getBeanDefinitionNames(),找不到任何动作,验证器或拦截器。

所以,如果Struts的创建的对象不是春豆管理,为什么春天注释(@Inject@Value,…)工作得很好?

从技术上讲,我们可以创建一个新对象(在Spring启动之后)并将其传递给Spring并由Spring设置吗?怎么样?!


问题答案:

Struts使用ObjectFactory来构建任何对象,例如动作,拦截器,验证器等:

ObjectFactory负责构建核心框架对象。用户可以注册自己的实现ObjectFactory来控制这些对象的实例化。

Struts-Spring插件注册自己的对象工厂StrutsSpringObjectFactory

与Spring集成的Struts对象工厂。

在那里,它覆盖了构建对象的方法,例如buildBean()

现在,如果您看一下实现,它就是使用方法
org.springframework.beans.factory.config.AutowireCapableBeanFactory#createBean()

通常会创建clazz参数的新实例。

此类的中央方法:创建Bean实例,填充Bean实例,应用后处理器等。

然后,将新创建的实例传递给以进行自动装配
org.springframework.beans.factory.config.AutowireCapableBeanFactory#autowireBeanProperties()

之后,此实例将传递给Guice进行注入。

现在,它已经完全 烤好 ,可以退货了。

注意,如果bean是由Spring管理的,则它使用getBean应用程序上下文中的方法,否则,如果bean不是由Spring管理的,则新实例始终由struts-
spring插件创建。



 类似资料:
  • 我是Spring新手,也是Spring批新手——所以,请耐心等待。 我知道spring batch是帮助运行步骤和任务的框架。 我尝试通过创建步骤和任务来使用spring批处理,但这些步骤和任务是在程序构建/编译时硬编码的。然而,我不知道如何动态创建任务和步骤。 我想做的是让用户创建一个脚本,说明如何从步骤列表中组装任务。每个步骤都将调用对现有RESTendpoint的远程调用。一项任务将包含多个

  • 我们需要执行从一个数据库到其他数据库的数据移动,并为此探索spring batch。我们应用程序的用户选择源数据源和目标数据源,以及需要为其移动数据的表列表。 在以下方面需要帮助: 构建作业所需的信息在运行时来自我们的web应用程序-包括数据源详细信息和表名列表。我们希望通过将这些详细信息发送到job builder模块来创建一个新作业,并使用JobLauncher启动它。我们如何编写这个job

  • 我有一个Spring批处理应用程序,可以从外部源读取数据。但当作业运行时,它会尝试在源数据库的Batch_Job_实例表中创建和插入数据,但用户没有任何权限。如何防止在源数据库中创建这些表? 有人能帮忙吗? 下面是错误日志 16:46:00,491ERROR[org.springframework.scheduling.support.TaskUtils$LoggingErrorHandler](

  • 问题内容: 我正在尝试为局部变量创建注释。我知道我不能在生成的字节码中保留注释,但是我应该能够在编译时通过执行以下操作来访问信息: 仅,当我在以下指定的受支持类型中指定包含“垃圾”的ProcessorFactory时,apt或javac不会对此进行处理: 但是,当我之前移动@Junk批注时,它将起作用 有想法或解决方法? 问题答案: 做了一些快速测试并进行了一些搜索,看起来好像并没有真正被支持。

  • 问题内容: 我想要具有来自同一数据条目的版本。换句话说,我想用另一个版本号复制该条目。 将是主键。 实体看起来如何?如何将其复制到另一个版本? 问题答案: 你可以制作一个,其中包含两个键,然后像中一样引用该类Entity。 你将需要和注释。 完成此任务的另一种方法是使用@IdClass批注,然后将两者都id放在该批注中IdClass。现在你可以@Id在两个属性上使用普通注释

  • 实体应该是什么样子的?我如何用另一个版本复制它?