Spring boot multi-hilo @ Solución de falla de inyección automatizada

Spring boot multi-hilo @ Solución de falla de inyección automatizada

Cuando se trata de problemas de subprocesos múltiples, los beans no se pueden inyectar a través de @Autowired y se informa de una excepción de puntero nulo.

Para la seguridad de los subprocesos, es antiinyección. Si desea usar esta clase, solo puede obtener una instancia de la fábrica de frijoles. Entonces solo tenemos que obtenerlo manualmente. La
solución es la siguiente:
Esta clase es una clase de herramienta para la obtención de beans, y también se entrega a la gestión de primavera. Se obtiene a través del contexto del programa. En la clase que necesita para ser inyectado en el bean, use el constructor para llamar al método correspondiente de obtención del bean a la necesidad. Objeto de inyección inyección proxy bean

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

@Component
clase pública ApplicationContextProvider implementa ApplicationContextAware {

/**
 * 上下文对象实例
 */
private static ApplicationContext applicationContext;

@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
	this.applicationContext = applicationContext;
}

/**
 * 获取applicationContext
 *
 * @return
 */
public static ApplicationContext getApplicationContext() {
	return applicationContext;
}

/**
 * 通过name获取 Bean.
 *
 * @param name
 * @return
 */
public static Object getBean(String name) {
	return getApplicationContext().getBean(name);
}

/**
 * 通过class获取Bean.
 *
 * @param clazz
 * @param       <T>
 * @return
 */
public static <T> T getBean(Class<T> clazz) {
	return getApplicationContext().getBean(clazz);
}

/**
 * 通过name,以及Clazz返回指定的Bean
 *
 * @param name
 * @param clazz
 * @param       <T>
 * @return
 */
public static <T> T getBean(String name, Class<T> clazz) {
	return getApplicationContext().getBean(name, clazz);
}

}

Obtenga el uso del bean, obtenga el bean a través de la clase en el método de construcción

@Component
clase pública CameraThreadService extiende Thread {

final NET net = NET.INSTANCE;
int init = net.Net_Init();
private String ip;

private Car_ownerDao dao1;
CameraComponentDaoImpl dao = new CameraComponentDaoImpl();
Camera_infoDaoImpl impl = new Camera_infoDaoImpl();

public CameraThreadService() {

}

public CameraThreadService(String ip1) {
	**dao1 = ApplicationContextProvider.getBean(Car_ownerDao.class);**
	ip = ip1;
}

}

Supongo que te gusta

Origin blog.csdn.net/qq_42938851/article/details/89175744
Recomendado
Clasificación