问题标签 [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.
java - NoSuchBeanDefinitionException:没有“org.springframework.mail.MailSender”类型的合格bean
我正在尝试通过自动装配 SpringContext 在我的 ApplicationListener 中使用 MailSender:
配置类是:
但我发现了以下异常:
java - 具有多个键的 Spring Boot Cache 实现
我有一项通过 、 或 搜索用户id
的email
服务username
。此外,它可以更新或删除用户id
。
缓存实现适用于当前的实现。
现在,我应该怎么做才能实现缓存getUserByEmail
和getUserByUsername
功能?由于所有 getter 函数都指向同一个缓存表user
,有没有办法使用多个键(id、电子邮件和用户名)维护缓存表,以便我可以使用任何键来获取缓存数据?
如果可能,这将如何影响我的@CachePut 和@CacheEvict?
java - Spring Container 和 BeanFactory 的实现之间的关系?
我是 Spring 的初学者,我在理解这两者的工作原理时遇到了问题。我将通过示例来解决我的问题。
我们有一个带有 Spring Core 模块的项目,在那个项目中,我们有两个@Component
在不同包中注释的类和一个在第三个包中的主类。
现在我们创建了三个不同的@Configuration
类,在一个类中,我们指定@ComponentScan(package with first @Component annotated class)
将其称为 config1,在几秒钟内,我们指定@ComponentScan(package with second @Component annotated class)
将其称为 config2,在第三个类中,我们指定将其@ComponentScan(both packages)
称为 config3。
现在在主类中,我们有以下代码:
我的理解:
在时间点 1,我们的应用程序正在运行 Spring Core。此时 Spring 创建了 Container 并且它没有对象。它是空的。 时间点1
那么我们创建AnnotationConfigApplicationContext
类型的对象。我们将 config1 类作为参数发送给该对象。然后该对象将读取@ComponentScan
注释并扫描 POJO 和元数据。扫描后,AnnotationConfigApplicationContext
对象将创建 bean(本例中为 1 个 bean,并使用这种类型的上下文进行预加载)并将它们放置在 Spring Container 中。所以在我们的应用程序的这一点上,我们第一次在我们的 Spring Container 中有一些东西。
时间点 2
类型的对象AnnotationConfigApplicationContext
只会引用我们放入容器中的 bean?!那么当我们调用getBean()
方法时,我们的 Context 会从 Container 中“带”出 bean 吗?
同样的事情发生在时间点 3 和时间点4 上......
所以,基本上我的问题是:对象是某种实现BeanFactory
,读取 POJO 和元数据,创建 BEANS 并将它们放入 Spring Container?它不包含bean,它只指向容器中的那些bean?而Container只包含那些bean,他除了持有bean之外没有任何功能,就像它只是放在内存中一样?而且我们的应用程序中只有一个 Container,我们可以有多个 BeanFactory 对象但只有一个 Container?
rabbitmq - 使用 Spring-context 进行集成测试不接收 RabbitMQ 消息
RabbitMQ MessageConsumer 没有收到发布的消息
我正在编写一个集成测试,它应该从队列中接收消息并进行处理。但是消费者根本没有收到消息。
当我手动注入依赖项时 -没有 Spring context,一切正常。但是当我使用 SpringContext 时,消费者没有收到消息。
从SpringInfraConfig.class
环境变量加载值。为了'emule'我正在使用这个库EnvironmentVariables
中的类的环境。env 变量加载良好 - 检查运行调试。
注意当我提到没有 SpringContext 工作正常时,我也没有使用环境库。
要将消息发布到 RabbitMQ 队列中,我在测试方法上“手动”进行。消息发布得很好。在调用我的真实测试类之前,我编写了一个 consming 测试代码。DefaultConsumer#handleDelivery
这是一个简单的原始消费者,用 a覆盖sysout
来打印传入的消息。作品。
当我使用我的真实测试类进行测试时 -MessageConsumerServiceImpl.class
它只是记录从队列中开始消费并且测试结束。
当我调试并进入所有方法时,会发生一些非常奇怪的事情 - 收到消息并且在处理过程中它最终没有完成所有调用 -测试只是停止,也没有抛出错误。
另一个奇怪的事情是 - 启用 RabbitMQ 管理插件,没有队列、交换、通道甚至连接打开。我在调试运行中检查了这一点,同时停止进入断点。
SpringConfig 类
MessageConsumerServiceImpl 类
集成测试类
Gradle 依赖项
核心构建.gradle
infra-build.gradle
测试输出
我对问题没有更多的想法。欢迎任何帮助。提前致谢
更新
我再次编写了测试以使其更简单。我用 Spring-context 和 env 的东西写了一个代码,而另一个没有 Spring-context 和 env 的东西。两者都没有工作。
所以,为了测试porpuse,我编写了一个简单的代码Thread#sleep()
,猜猜看,两个测试都有效!
我认为原因是 RabbitMQ DefaultConsumer 实例化了一个用于消费消息的新线程,释放了主要测试线程并且它被停止了。由于主线程已停止,所有其他线程也已停止。
所以我认为我们在这里遇到了同步测试问题。
如果测试代码检查应该在执行中插入的数据库值但在检查时尚未处理,则可能会导致测试失败?
java - Spring Boot 原型 bean:来自 Spring Context 的注入和提供的参数
我有一个 Spring Boot 应用程序,我在其中使用“原型”bean。我知道可以通过构造函数参数注入参数,但我想避免这种方法,因为我有许多额外的配置参数,包括其他 Bean 和我的每个实例参数。
有什么方法可以让 Spring 从其内部 Bean 集和我提供的参数中进行自动装配?我想避免完全设置调用。
spring - Spring Context Hierarchy:如何同时初始化子上下文
我使用 Spring Boot Fluent Builder API 来构建一个 Spring 上下文层次结构,如此处所述。
是否可以同时初始化子上下文?
java - spring-context 和 spring-web 4.2.4.RELEASE
为什么我需要包含spring-context
在我的新spring boot
项目中才能工作?
我有这个在我的pom.xml
我可以在 spring-web 依赖项中看到依赖项 spring-context
如果我从 pom.xml 中删除 spring-context,则应用程序不会运行。
以下是我得到的错误:
java - Spring @Scheduled 方法 SecurityContext
有@Scheduled
注释的方法SecurityContext
吗?当我尝试使用以下内容时,它始终securitycontext/auth
为空。如果这是不可能的,那么运行用户特定身份验证感知计划任务的正确方法是什么?
spring - spring 上下文存储在哪里,数据结构是什么?
弹簧上下文存储在哪里?在哪个数据结构中?(我听说它只是一个 Map,是吗?)(我不是指 xml 文件的路径,我的意思是当 Spring 读取 bean 定义时,它会将有关它的信息存储在某处并注入它)
spring-boot - 动态注入没有注解的bean
我想根据yaml文件生成对象并将其注入到Spring容器中(比如实例化多个DataSourceTransactionManager)。@Bean 注解不符合要求。我无法获取实现 ImportBeanDefinitionRegistrar 的配置信息,因为他需要一个无参数的构造函数。我应该怎么办?
上面的DataSourceTransactionManager如何动态生成,不用管数量