`
can_do
  • 浏览: 263542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringBoot框架下如何实现多线程中【Autowire不好使时】注入对象

阅读更多
需要通过原生Spring获取对象的方式,
1、先编写以下工具类SpringBeanUtil.java
package com.cnd.yourcompany.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringBeanUtil implements ApplicationContextAware {
	private static ApplicationContext applicationContext = null;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		// TODO Auto-generated method stub
		SpringBeanUtil.applicationContext = applicationContext;
	}

	/**
	 * 从静态变量applicationContext中得到Bean, 自动转型为所赋值对象的类型.
	 */
	@SuppressWarnings("unchecked")
	public static <T> T getBean(String name) {
		if (name == null || applicationContext == null)
			return null;
		return (T) applicationContext.getBean(name);
	}

	/**
	 * 从静态变量applicationContext中得到Bean, 自动转型为所赋值对象的类型.
	 */
	public static <T> T getBean(Class<T> clazz) {
		return applicationContext.getBean(clazz);
	}

}

2、映射yml文件的JavaBean
package com.cnd.yourcompany.utils;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "emqx")
public class IvtMqttConfigureInfo {

	private String url;
	
	private int port;
	
	private String username;
	
	private String password;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}

	public String getUrl() {
		return url;
	}

	public void setUrl(String url) {
		this.url = url;
	}
}

3、在业务线程中实现配置文件信息使用
public class MqttClientSubMsgInFuture implements Runnable {

	private IvtMqttConfigureInfo configInfo = SpringBeanUtil.getBean(IvtMqttConfigureInfo.class);
	
	//......
}


4、yml文件配置application.yml如下:
emqx:
  url: www.yourcompany.com
  port: 1883
  username: biz_user
  password: asde13sdeow75x1w
分享到:
评论

相关推荐

    多线程Autowire注入null的解决方案.docx

    1. 多线程Autowire注入null的原因是因为多线程是防注入的,容器中的组件不会自动注入到多线程中。 2. 解决方案一:将需要使用的service当做多线程实现类的一个属性参数。 3. 解决方案二:写个获取spring bean的帮助...

    详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

    在 SpringBoot 多线程处理任务中无法使用 @Autowired 注入 bean 的问题,可以通过创建一个工具类来解决,这个工具类可以用于获取 bean 对象,从而解决多线程处理任务中无法使用 @Autowired 注入 bean 的问题。

    在springboot中使用注解将值注入参数的操作

    本文将介绍如何在 Spring Boot 中使用注解将值注入参数,主要涵盖了定义注解、定义注解处理类、使 Spring Boot 支持该拦截器三个方面的内容。 一、定义注解 在 Spring Boot 中,定义注解需要使用 @interface ...

    解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题

    "解决SpringBoot项目使用多线程处理任务时无法通过@Autowired注入bean问题" Spring Boot项目在使用多线程处理任务时,经常会遇到无法通过@Autowired注入bean的问题。本文将介绍解决该问题的方法,并详细解释原因和...

    Autowire是Python的轻量级和简单的依赖注入库

    **Autowire:Python中的轻量级依赖注入库** 在Python开发中,依赖注入(Dependency Injection,简称DI)是一种设计模式,它可以帮助我们编写更灵活、可测试和可维护的代码。Autowire是一个专为Python设计的轻量级且...

    springboot-autowire:学习springboot自动装配原理

    #学习springboot自动装配 ##一,手动装配 ### 1,模式注解装配 @Component注解,或者@Component注解的扩展,@ Controller,@ Service,存储库,@ Configruation等, ### 2. @ Configuration启动容器+ @ Bean注册...

    spring-autowire.zip

    Spring框架通过DI实现了这一模式,使得对象间的依赖关系更加清晰,降低了代码的复杂性。 接下来,我们来看看@Autowired注解。@Autowired是Spring框架提供的一个用于自动装配bean的注解,它可以被用在字段、构造器、...

    SpringBoot.docx

    SpringBoot 是一个基于 Java 的框架,它简化了创建独立、生产级别的基于 Spring 应用的步骤,通过自动配置和一站式的解决方案,使得开发者能够更快地搭建应用并投入开发。SpringBoot 的核心特性包括内嵌式 web ...

    autowire自动导入句柄

    在Spring框架中,`autowire`是一种自动装配bean依赖的方式,它极大地简化了bean之间的依赖注入过程。本文将深入探讨`autowire`自动导入句柄及其在实际开发中的应用。 ### 1. `autowire`简介 `autowire`是Spring...

    解决Springboot @Autowired 无法注入问题

    在Spring Boot应用中,`@Autowired`注解用于自动装配依赖的bean,是Spring框架提供的一种依赖注入方式。然而,当出现`@Autowired`无法注入的情况时,这通常意味着Spring容器无法正确地扫描并管理你的组件。在描述中...

    springboot+vue基于java的少数民族音乐网站的设计与实现论文.docx

    SpringBoot+Vue基于Java的少数民族音乐网站的设计与实现论文 一、系统架构设计 本系统设计采用了JAVA语言,使用Spring Boot框架技术对系统进行开发。Spring Boot框架是一种基于JAVA的开源框架,可以快速构建独立的...

    storm-spring-autowire:使storm支持spring的注入功能

    这个项目采取了了在prepare方法中执行注入的方式使bolt在序列化完成后执行注入,绕开了storm的序列化机制 使用这个项目里 你可以通过以下代码做到最基本的注入 @Resource private SentenceCounter counter; public ...

    Java框架笔试题(含答案).docx

    使用构造方法注入可以在创建对象时完成依赖关系的建立。 四、ApplicationContext 接口 ApplicationContext 接口是 beanfactory 的子接口,提供了对资源文件的访问支持。fileSystemXmlApplicationContext 是其子...

    SSH框架整合源码和数据库(结合MySQL实现简单的用户登录)

    5. **配置Spring**:在spring-context.xml中配置UserDAO,使用bean的`class`属性指定实现类,并通过`autowire`属性实现自动装配。 6. **配置Struts**:创建Action类,该类通常由Spring管理,负责处理用户请求。在...

    Struts2+Spring3+Hibernate3框架整合标签注入版

    在这个工程中,Spring3采用了标签注入的方式,这意味着在XML配置文件中,我们可以使用`&lt;bean&gt;`标签的`autowire`属性来实现自动装配,减少手动配置的工作量。同时,Spring3还集成了Hibernate3,使得数据访问层的管理...

    springboot——员工管理系统源码

    Spring框架提供了AOP(面向切面编程)和IOC(控制反转)两大核心特性,AOP用于处理横切关注点,如日志、事务等,而IOC则是Spring的核心,通过依赖注入实现了对象之间的解耦。 在实际运行中,SpringBoot的内嵌Tomcat...

    spring常见问题

    在单例对象中使用多例对象时,需要注意对象的生命周期和线程安全问题。 通过实现 BeanFactoryAware 接口来获得 factory 可以获取 Spring 容器。 动态代理技术是指在运行时生成代理对象,以便在运行时动态地将横切...

    Spring三种注入方式(二)

    在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本篇主要介绍Spring中的三种注入方式,着重讲解在"Spring三种注入...

    autowire::electric_plug:Go依赖注入框架

    用于Golang的基于反射的依赖项注入工具箱。 该自述文件处于进行中状态。 安装 整个项目基于go模块。 要获取最新版本,请使用go1.16 +并使用go get命令获取它。 例如: go get github.com/go-autowire/autowire ...

    spring-autowire-demo.zip

    在Spring框架中,自动装配(Autowiring)是一种强大的特性,它允许我们无需显式配置bean之间的依赖关系,Spring会自动地将bean的依赖注入到它们的实例中。本示例"spring-autowire-demo.zip"是基于Spring 5.3.6版本,...

Global site tag (gtag.js) - Google Analytics