问题标签 [spring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4519 浏览

spring - 如何使用 Spring AOP(或 AspectJ)定义/配置多个方面的优先级

我已经能够在业务服务类上使用 Spring AOP(结合 AspectJ 注释)定义多个方面(一个是 @Before,另一个是 @Around)。

目前,他们被一一(按顺序)调用。但是我想知道如何定义调用方面的优先级以及在哪里。

请就 Spring AOP 指导我。请注意,我使用的是 Spring 2.5.3 框架。

0 投票
5 回答
41465 浏览

java - 使用 Spring 和 Hibernate 跨多个数据库执行分布式事务的“最佳”方法是什么

我有一个应用程序 - 更像是一个实用程序 - 它位于角落并定期更新两个不同的数据库。

这是一个使用 Spring Application Context 构建的小型独立应用程序。上下文中配置了两个 Hibernate Session Factories,依次使用 Spring 中配置的 Commons DBCP 数据源。

目前没有事务管理,但我想补充一些。对一个数据库的更新取决于对另一个数据库的成功更新。

该应用程序不位于 Java EE 容器中 - 它由从 shell 脚本调用的静态启动器类引导。启动器类实例化应用程序上下文,然后调用其中一个 bean 上的方法。

围绕数据库更新进行事务处理的“最佳”方式是什么?

我将把“最佳”的定义留给您,但我认为它应该是“易于设置”、“易于配置”、“便宜”和“易于打包和重新分发”的一些功能。自然开源软件会很好。

0 投票
17 回答
380225 浏览

java - 获取 Spring 应用程序上下文

有没有办法在 Spring 应用程序中静态/全局请求 ApplicationContext 的副本?

假设主类启动并初始化应用程序上下文,它是否需要通过调用堆栈将其传递给任何需要它的类,或者有没有办法让一个类请求先前创建的上下文?(我认为必须是单身人士?)

0 投票
16 回答
29788 浏览

xml - 依赖注入容器有什么好处?

我了解依赖注入本身的好处。让我们以 Spring 为例。我也了解其他 Spring 特性的好处,如 AOP、不同类型的助手等。我只是想知道,XML 配置有什么好处,例如:

与普通的旧 java 代码相比,例如:

这更容易调试,编译时间检查,任何只知道java的人都可以理解。那么依赖注入框架的主要目的是什么?(或一段显示其好处的代码。)


更新:
如果

如果有多个,IoC 框架如何猜测我要注入的 myService 的哪个实现?如果给定接口只有一个实现,并且我让 IoC 容器自动决定使用它,那么在出现第二个实现后它将被破坏。而且,如果故意只有一种可能的接口实现,那么您不需要注入它。

看到 IoC 的一小部分配置显示它的好处会非常有趣。我使用 Spring 已经有一段时间了,我无法提供这样的例子。我可以展示单行代码来展示我使用的 hibernate、dwr 和其他框架的好处。


更新 2:
我意识到可以在不重新编译的情况下更改 IoC 配置。这真的是个好主意吗?我可以理解何时有人想要更改数据库凭据而不重新编译 - 他可能不是开发人员。在您的实践中,开发人员以外的其他人多久更改一次 IoC 配置?我认为对于开发人员而言,无需重新编译该特定类而不是更改配置。对于非开发人员,您可能希望让他的生活更轻松并提供一些更简单的配置文件。


更新 3:

接口及其具体实现之间映射的外部配置

让它外接有什么好处?您不必将所有代码都放在外部,虽然您绝对可以 - 只需将其放在 ClassName.java.txt 文件中,即时手动读取和编译 - 哇,您避免了重新编译。为什么要避免编译?!

您可以节省编码时间,因为您以声明方式提供映射,而不是在程序代码中

我知道有时声明性方法可以节省时间。例如,我只声明一次 bean 属性和 DB 列之间的映射,hibernate 在加载、保存、构建基于 HSQL 的 SQL 等时使用此映射。这就是声明性方法的工作原理。在 Spring 的情况下(在我的示例中),声明有更多的行并且与相应的代码具有相同的表现力。如果有这样的声明比代码短的例子 - 我想看看。

控制反转原则允许简单的单元测试,因为您可以用假的实现替换真实的实现(比如用内存中的替换 SQL 数据库)

我确实理解控制反转的好处(我更喜欢将这里讨论的设计模式称为依赖注入,因为 IoC 更通用 - 有多种控制,我们只反转其中一种 - 初始化控制)。我在问为什么有人需要编程语言以外的东西。我绝对可以使用代码用假的实现替换真实的实现。这段代码将表达与配置相同的内容——它只会用假值初始化字段。

我确实了解 DI 的好处。我不明白与配置相同的代码相比,外部 XML 配置有什么好处。我认为不应该避免编译——我每天都在编译,而且我还活着。我认为 DI 的配置是声明性方法的坏例子。如果声明一次并且以不同的方式多次使用,则声明可能很有用 - 例如 hibernate cfg,其中 bean 属性和 DB 列之间的映射用于保存、加载、构建搜索查询等。Spring DI 配置可以很容易地转换为配置代码,就像在这个问题的开头一样,不能吗?而且它仅用于 bean 初始化,不是吗?这意味着声明性方法不会在此处添加任何内容,是吗?

当我声明hibernate映射时,我只是给hibernate一些信息,它基于它工作——我不告诉它做什么。在春天的情况下,我的声明告诉春天到底要做什么——那么为什么要声明它,为什么不直接去做呢?


最后更新:
伙计们,很多答案都在告诉我有关依赖注入的信息,我知道这很好。问题是关于 DI 配置的目的而不是初始化代码 - 我倾向于认为初始化代码更短更清晰。到目前为止,我对我的问题的唯一答案是,当配置更改时,它可以避免重新编译。我想我应该发布另一个问题,因为这对我来说是一个很大的秘密,为什么在这种情况下应该避免编译。

0 投票
7 回答
36011 浏览

java - 处理命令行参数和 Spring

当我编写解析命令行参数的 Spring 命令行应用程序时,如何将它们传递给 Spring?我是否想让我的 main() 结构化,以便它首先解析命令行参数然后初始化 Spring?即便如此,它如何将保存已解析参数的对象传递给 Spring?

0 投票
2 回答
1636 浏览

java - 由于 MS SQL 中 UNIQUE 约束的非标准行为,Spring/Hibernate 的解决方法

索引上有一个 UNIQUE 数据库约束,它不允许多个记录具有相同的列。

有一段代码,由 Hibernate (v2.1.8) 管理,执行两次 DAO
getHibernateTemplate().save( theObject )
调用,结果将两条记录输入到上面提到的表中。

如果此代码在没有事务的情况下执行,则会产生 INSERT、UPDATE,然后是另一个 INSERT 和另一个 UPDATE SQL 语句,并且工作正常。显然,顺序是先插入包含 DB NULL 的记录,然后用适当的数据更新它。

如果此代码在包装在单个 Spring 事务中的 Spring (v2.0.5) 下执行,则会导致两个 INSERTS,然后由于上述 UNIQUE 约束而立即出现异常。

由于与 ANSI SQL 不兼容,此问题仅在MS SQL上表现出来。它在 MySQL 和 Oracle 上运行良好。不幸的是,我们的解决方案是跨平台的,必须支持所有数据库。

拥有这些技术堆栈,对于给定问题,您首选的解决方法是什么?

0 投票
11 回答
616 浏览

spring - 您更喜欢将应用程序的哪些部分外部化为配置,为什么?

您的应用程序的哪些部分没有编码?我认为最明显的例子之一就是数据库凭证——硬编码被认为是不好的。在大多数情况下,很容易决定是否要外部化或编码。对我来说,规则很简单。如果出现以下情况,应将应用程序的某些部分外部化:

  1. 它可以并且应该由非开发人员更改,但不经常包含在 UI 中定义的应用程序设置中(数据库凭据、服务 URL 等)
  2. 它不需要编程语言并且看起来不自然被编码(本地化)

你有什么要补充的吗?

这与这个关于 spring cfg的问题有点相关。Spring 配置对我来说似乎不太明显,因为在我的实践中,除了开发人员之外,任何人都不会修改它。而外化的道路可以带你走很远,到整个项目都被“配置”,而不是编码——那么在哪里停下来呢?

因此,请根据您的经验在此处发布一些示例,当您从配置而不是编码的东西中受益时 - 比如 spring 中的依赖注入配置等。如果您使用 spring - 在不重新编译的情况下多久更改一次配置?

0 投票
3 回答
3692 浏览

spring - 您如何访问 bean 的属性以读取 spring xml 配置文件?

我想在春天做以下事情:

我认为这将访问 bean1 的 getFoo() 方法并调用 bean2 的 setPropName() 方法,但这似乎不起作用。

0 投票
4 回答
1912 浏览

java - 如何在 Eclipse 中正确设置由 appfuse 创建的多模块 SpringMVC 应用程序?

我正在尝试在 Eclipse 中设置一个多模块 SpringMVC appfuse 应用程序,但在 Eclipse 中导入项目后,我似乎在 Eclipse 中遇到了很多错误。谁能帮助我一步一步的指导,显示在 Eclipse 中设置此类应用程序的理想方法?

0 投票
2 回答
1051 浏览

spring - 使用 Spring 分离表示层和业务层

在我刚刚完成的项目中,我正在努力让分布式事务正常工作。

我们使用 JBoss 的 Arjuna 事务管理器和 Spring 的声明性事务边界来实现这一点。

我们的请求序列如下所示:

这意味着我们有一个 WAR 服务于我们的安全 servlet 和一个 EAR 服务于我们的 SLSB。

我们的 SLSB 有一个静态初始化块来引导我们的 Spring 应用程序上下文。

我不喜欢技术的混合,但我喜欢表示层和业务层的分离,它们可以驻留在不同的物理位置。

我很想知道其他人在使用 Spring 时建议将层分开吗?