访问方式例子:
FlowAlarmService flowAlarmService = (FlowAlarmService) Global.getSpringBean("flowAlarmService");
package com.sinoufc.framework.cache;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.sql.DataSource;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.BeanFactory;
import com.sinoufc.base.permission.baseinfo.model.BaseInfo;
import com.sinoufc.framework.ui.UISession;
import freemarker.template.Configuration;
import freemarker.template.Template;
/**
* 全局的资源工厂
*
* @author
* @since
*/
public class Global {
private static Logger log=Logger.getLogger(Global.class);
/** spring bean工厂 */
private static BeanFactory beanFactory;
/** freemarker模板工厂 */
private static Configuration fmConfig;
/** 数据源缓存 */
private static Map<String, DataSource> dataSourceMap = new ConcurrentHashMap();
/** 当前用户使用数据源 */
private static ThreadLocal<DataSource> dataSourceThread = new ThreadLocal<DataSource>();
/** 当前线程session */
private static ThreadLocal<UISession> currentSession = new ThreadLocal<UISession>();
/**
* 通过sessionId获得用户session
*
* @param key sessionId
* @return 用户session
*/
public static UISession getSession(String sessionId) {
CacheUtil cacheUtil = (CacheUtil) Global.getSpringBean("cacheUtil");
return cacheUtil.getSession(sessionId);
}
/**
* 缓存session
*
* @param sessionId sessionId
* @param session 用户session
*
*/
public static void setSession(String sessionId, UISession session) {
CacheUtil cacheUtil = (CacheUtil) Global.getSpringBean("cacheUtil");
cacheUtil.setSession(sessionId, session);
}
/**
* 通过名称获得bean
*
* @param name bean名称
* @return bean
*/
public static Object getSpringBean(String name) {
return beanFactory.getBean(name);
}
/**
* 设置spring工厂
*
* @param beanFactory spring的bean工厂
*/
public static void setBeanFactory(BeanFactory beanFactory) {
Global.beanFactory = beanFactory;
}
public static void removeSession(String sessionId){
CacheUtil cacheUtil = (CacheUtil) Global.getSpringBean("cacheUtil");
cacheUtil.removeSession(sessionId);
}
/**
* 获得当前线程数据源
*
* @return 当前用户所使用数据源
*/
public static DataSource getDataSource() {
return dataSourceThread.get();
}
/**
* 设置当前用户所使用数据源
*
* @param dataSource 要设置的数据源
*/
public static void setDataSource(DataSource dataSource) {
dataSourceThread.set(dataSource);
}
/**
* 获得系统基础信息
*
* @param type 系统基础信息
* @return 某种类型的基础信息列表
*/
public static List<BaseInfo> getBaseInfo(String type) {
CacheUtil cacheUtil = (CacheUtil) Global.getSpringBean("cacheUtil");
return cacheUtil.getBaseInfo(type);
}
/**
* 获得freemarker模板
*
* @param name 模板名称
* @return freemarker模板
*/
public static Template getTemplate(String name) {
try {
return fmConfig.getTemplate(name);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 设置freemarker模板工程 n
*
* @param fmConfig 模板工厂
*/
public static void setFmConfig(Configuration fmConfig) {
Global.fmConfig = fmConfig;
}
public static UISession getCurrentSession() {
return currentSession.get();
}
public static void setCurrentSession(UISession session) {
currentSession.set(session);
}
}
分享到:
相关推荐
然而,在某些情况下,我们可能需要在非Spring注解的类中访问Spring容器中的Bean,或者在这些类中使用YAML配置文件中的配置信息。本篇将详细介绍如何在这样的场景下实现这一目标。 首先,让我们来理解如何在非Spring...
SpringBoot如何在普通类加载Spring容器 SpringBoot作为一个流行的Java框架,提供了很多便捷...通过封装一个工具类来获取Spring容器中的Bean,可以方便地在普通类中使用这些Bean,这种方式非常实用,可以提高开发效率。
这样,我们就能在普通类中获取到Spring管理的bean实例。 2. **@Autowired**:如果普通类也是Spring的一部分,即它也被Spring管理,那么可以使用注解`@Autowired`来自动装配bean。这样,Spring会自动找到类型匹配的...
Spring把Bean放在这个容器中,普通的类在需要的时候,直接用getBean()方法取出
Spring Boot普通类调用bean【从零开始学Spring Boot】”旨在指导初学者如何在非Spring管理的类中访问和使用Spring容器中的bean。下面将详细讲解这个主题。 首先,了解Spring Boot的基础概念是必要的。Spring Boot...
然后,我们可以使用这个类来获取spring容器中的对象。例如,我们可以使用getBeanByClass方法来根据类类型来获取bean。 在使用这个实现方法时,我们需要注意以下几点: 首先,我们需要确保spring容器已经被正确地...
组件扫描是指Spring容器会遍历指定的包及其子包,寻找带有特定注解的类,这些注解表明该类是一个Spring Bean。常见的注解有@Component、@Service、@Repository和@Controller,它们分别代表不同层次的组件角色。 1. ...
@SpringBootApplication 会根据类型决定是创建普通 WEB 容器还是 REACTIVE 容器还是普通 Annotation 的 IOC 容器。 6. Spring 容器前置处理 在 refresh 容器之前,SpringApplication 会进行一些前置处理,例如...
在Spring框架中,Bean是核心概念,它代表了应用程序中的对象,这些对象由Spring容器管理其生命周期和依赖关系。特殊Bean用法主要涉及Spring提供的多种高级特性,包括但不限于工厂方法、 prototype scope、AOP代理、...
使用 SpringUtil 工具类可以让我们在普通类中轻松地获取 applicationContext 对象,从而获取所需的 Bean 对象。这样,我们就可以在不需要将类注入到 Spring 容器中的情况下使用 Spring 提供的对象。 结语 在本文中...
Spring 在 IoC 容器中装配 Bean 详解 Spring 框架中的 IoC 容器是一个核心组件,它提供了 Bean 的装配、管理和依赖注入等功能。在 Spring 框架中,IoC 容器是 Bean 的容器,负责创建、管理和装配 Bean。在本文中,...
这些注解可以用于标记任何普通的Java类,声明它们为Spring Bean。`@Component`用于通用组件,`@Service`用于业务层,`@Repository`用于数据访问层。 2. **`@Autowired`注入**:当Bean被自动扫描后,Spring可以使用`...
这个过程确保了Spring容器对Bean的控制,保证了应用程序的正常运行。 总结来说,Spring在初始化阶段通过`finishBeanFactoryInitialization()`方法进行了一系列的准备工作,包括设置转换服务、处理织入转换器、停用...
@Bean 是一个注解,用来将一个普通的对象转换为一个 Spring bean,以便可以在spring 容器中管理。@Bean 可以使用在方法上,以便将该方法的返回值转换为一个 Spring bean。 在 Spring Boot 中,以上几种注入方法都是...
本文档中的示例通过外部Spring容器获取指定的实现Bean,并通过Axis2提供服务。这涉及到以下几个关键步骤: **1. 创建服务实现类:** - 开发者需要手动编写WSDL文件和服务实现类,而不是使用Axis2提供的工具(如...
Bean与普通Java对象的区别在于,Bean是由Spring负责实例化的,同时,当从Spring容器中获取Bean时,Spring还会对Bean中带有`@Autowired` 注解的属性进行自动注入赋值,这是手工new对象无法实现的特性。Spring容器中的...
普通的POJO只要标注@Configuration注解,就可以为Spring容器提供Bean定义的信息了,每个标注了@Bean的类方法都相当于提供一个Bean的定义信息。 基于Java类的配置方法和基于XML或基于注解的配置方式相比,前者通过...
Spring容器会根据`Conf`类中的`@Bean`注解来创建bean,然后我们可以通过bean的类型从容器中获取对象并调用其方法。 值得注意的是,`AnnotationConfigApplicationContext`可以接受多个类作为输入,这些类可以是`@...
在获取 IOC 容器中 bean 时,需要注意 bean 的 id 唯一性和类型唯一性。 七、Bean 的生命周期 Bean 的生命周期包括创建、初始化、销毁三个阶段。Spring 提供了多种方式来管理 Bean 的生命周期。 八、AOP AOP 是 ...
Bean是Spring容器管理的对象,可以通过XML配置文件或者Java配置类来定义。Bean的定义包括了类名、属性、构造器参数等信息,Spring容器根据这些信息创建和管理Bean。 **注解驱动的配置** Spring 5.2.9支持使用注解来...