问题标签 [spring-context]

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 回答
156 浏览

java - FileNotFoundException:无法打开类路径资源,因为它不存在

我正在尝试使用 openfire 运行 Spring,但出现此错误: FileNotFoundException: 类路径资源 [ForwarderApplicationConfiguration.class] 无法打开,因为它不存在 org.springframework.context.annotation.ConfigurationClassParser - 无法通过 ASM 读取类文件用于确定@Bean 方法顺序

这是主要课程:

起居室:

0 投票
0 回答
145 浏览

java - 无法转换 JndiRmiProxyFactoryBean 类型的值 找不到匹配的编辑器或转换策略

在我的项目中,我配置了 spring bean 如下。(获得DataSource通过JNDI)。当我spring 3.2.5hibernate 4.

但是,现在当我尝试将 Spring 更新到 5.1.8 和 Hibernate 5 时,出现以下错误。

为什么org.springframework.remoting.rmi.JndiRmiProxyFactoryBean不能投到javax.sql.DataSource。有人对此有想法吗?

更新:完整的错误日志如下

0 投票
0 回答
46 浏览

java - 如果我将注解@Component 放在接口或实现类上,有什么区别?

例如,我有接口 IRobot,我有一个实现 RobotImpl。如果我在接口上放注解@Component 会自动扫描它的所有实现吗?我认为 @Component 注释就像是在说“嘿 Spring,为我创建一个此类的实例并将其放入您的上下文中,以便稍后自动装配它。”,对吗?

0 投票
1 回答
790 浏览

spring - @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

我正在将 spring form 4.3.3 升级到 5.2.7,但我遇到了这个例外:

例外:

代码 :

PS 1:我正在使用带有 args 的 context.getBean 来初始化我的 bean

PS 2:我在应用程序启动时遇到了这个问题,即使我在启动时没有使用 bean(我正在使用 @Scope("prototype") 来初始化 bean 每当它被调用)

PS 3:我对 spring 4.3.3 没有问题

0 投票
0 回答
90 浏览

java - Spring忽略类加载器

Java 9 和 11 通常需要使用自定义类加载器。所以我创建了一个BootstrapClassloader预加载我的类路径,并使用Thread.currentThread().setContextClassLoader(classloader)它来使其成为默认值。

我很快发现 Spring 在使用new ClassPathXmlApplicationContext().

我想没问题,并写了一个我调用的变体BootstrapClassLoader来尝试强制 Spring 使用我的类加载器。但是 Spring 仍然忽略了我的类加载器。

例如,我验证了 aopalliance-1.0.jar 在类加载器的类路径中,并且可以手动加载MethodInterceptor. 但是,如果我有一个标准 DBCP2 数据源 bean 的上下文(取决于 aopalliance),它会抛出一个ClassNotFoundExceptionfor org.aopalliance.intercept.MethodInterceptor.

任何人都可以在下面的代码中看到一个缺陷,或者是否有一些特殊的方法来注册类加载器,以便 Spring 始终在应用程序中使用它?

数据源片段:

测试应用代码:

BootstrappedApplicationContext(类似于 ClassPathXmlApplicationContext):

0 投票
0 回答
124 浏览

java - 泛型情况下的 Spring 事件路由

我想构建基于事件泛型类型的事件处理。

活动类别:

Push是类的标记接口:PushNotificationNewPushNotificationFail.

听众:

PushNotificationStoreEvent<PushNotificationNew>问题:听众之间没有区别PushNotificationStoreEvent<PushNotificationFail>

这意味着,所有事件PushNotificationStoreEvent都由所有侦听器处理。

我可以通过为每个案例创建单独的事件类或使用一个侦听器并选择正确的操作instanceof来解决这个问题。event.push也许您知道更好的解决方案?

0 投票
0 回答
289 浏览

spring - 在创建 obj 或 bean 期间,JVM 和 Spring 容器如何协同工作?

Spring 容器通过首先创建 DAG 来创建,然后在创建任何依赖于 other的之前Beans实例化非依赖项。这很好并且可以理解。任何依赖于常规 java / pojo 的东西都可以由 JVM 类加载器机制提供,这也很好。beansbeansbeansbeansobjects

但是任何依赖于 bean 的 java 对象都是让我更深入地理解这种交错机制的原因。

  1. 在简单的情况下 - JVM 可以等待 spring 容器完成其 bean 创建过程,然后 JVM 可以创建它必须创建的任何 java obj。

  1. 对于交错的 bean 和 java obj:它们(jvm 和 spring 容器)都将根据需要以交错的方式创建 bean 和 java obj。我想到这一点是因为,当一个 bean 可以有一个对常规 java obj 的引用时,一个 java obj 可以有一个 bean 作为依赖项。

所以,澄清一下——Spring Container 和 JVM 是否以交错的方式创建 bean 和 obj。

(这是一个了解 Spring Container 与 JVM 一起工作的问题,这不能特定于类、seceniro 或用例,所以请不要将此问题标记为缺乏细节或用例或其他东西 - - 感谢您的理解。)

编辑以下@BoristheSpider 评论:
采取一些spring bean. Spring 容器将尝试创建这个bean。现在,比如说,这bean取决于一个pojo. 那么现在,这是如何pojo创建的。它是由 Spring Container 直接创建还是通过将其委托给相应的 JVM 类加载器(引导程序或 ext 或应用程序)创建的。我认为它将委托给相应的 JVM 类加载器。有人可以澄清这一点。
NEXT - 当 JVM 必须创建一个pojo取决于它bean如何知道 bean 时。所以 JVM 和 Spring Container 必须关心一个和另一个。他们如何携手合作是我想要理解的。

0 投票
1 回答
123 浏览

java - spring 是否在上下文创建期间解析惰性 bean 的属性占位符?

我有一个像spring xml上下文文件这样的bean定义

${id.start}spring 是否在构建上下文时尝试解析属性?

我假设由于idFilter是延迟加载的,因此id.start在使用 bean 之前不会尝试解析该属性。

这样对吗?

0 投票
1 回答
40 浏览

java - 如何将 applicationContext 外部化并构造 ClassPathXmlApplicationContext 对象

我需要通过 spring applicationContext 配置进行外部化。我运行我的罐子:

spring 如何理解这个属性,我必须用什么来设置 ClassPathXmlApplicationContext 构造函数?

由于名称是由 spring 预定义的,spring 会自动知道位置吗?或者我们是否仍然必须传递从命令行参数获取的参数?

以下代码不起作用。

}

我需要外部化我的配置。在互联网上,所有的建议都是在运行 jar 时使用该属性,而不是超出此范围。

提前致谢!!

0 投票
0 回答
1694 浏览

java - 使用整个上下文运行其他测试时未注入 Springboot @MockBean

尝试在 Junit 测试中注入带有注释 @MockBean 的 bean 时,我遇到了一些问题。结果,我注入了真正的服务而不是模拟的服务,但奇怪的行为是,这只发生在使用 maven verify 运行测试时(与其他集成测试一起)。

基本上,我要模拟的 bean 被注入到侦听器 (@Component) 中,该侦听器由集成测试期间在队列上发送的消息触发。当监听器运行时,它里面的服务是真实的,而不是模拟的。

在我看来,在运行其他测试时,真正的 bean 先前被注入到上下文中,@MockBean 虽然应该重新启动 spring 上下文,但在遇到相同的 bean 时不会用模拟的 bean 替换现有的 bean类型。

这确实是一个奇怪的行为,因为文档说“在上下文中定义的任何现有的相同类型的单个 bean 都将被模拟替换”。好吧,这不会发生。

您可以在下面找到显示这是如何完成的片段。

要模拟的服务是:

像这样注入我的服务的侦听器

这是我的测试课

结果,我得到那个 mockito 说 someService 进行了 0 次调用,这是因为正在调用真正的服务。

为什么@MockBean 不替换真正的bean?不应该重新初始化上下文吗?

我尝试在其他测试中添加 @DirtiesContext 注释,在这种情况下一切正常,但这不是一个干净的解决方案。

这是我的 pom 的一部分,其中定义了故障安全插件。顺便说一句,这很简单:

谢谢