package com.alibaba.itbu.billing.framework.util;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
public class ServiceUtil {
private static final String filePath = "classpath*:bean/applicationContext.xml";
public static ApplicationContext ctx;
public static void setCtx(ApplicationContext webCtx) {
ServiceUtil.ctx = webCtx;
}
/**
* 如果不是加载默认的applicationContext.xml,请先加载自定义文件,eg:"classpath*:bean/applicationContext-define.xml"
* @param filePath
*/
public static void setCtx(String filePath){
ApplicationContext context = null;
try{
PathMatchingResourcePatternResolver prp = new PathMatchingResourcePatternResolver();
Resource[] platformResources = prp.getResources(filePath);
if(platformResources.length>0){
context = new ClassPathXmlApplicationContext(platformResources[0].getURL().toString());
}
}catch(Exception e){
e.printStackTrace();
context = null;
}
ServiceUtil.ctx = context;
}
@SuppressWarnings("unchecked")
public static <T> T getService(Class<T> businessInterface, String serviceName){
ApplicationContext ctx = getCtx();
if(ctx==null){
return null;
}
Object bean=null;
try{
bean = ctx.getBean(serviceName);
}catch (NoSuchBeanDefinitionException e){
return null;
}
return (T) bean;
}
public static ApplicationContext getCtx() {
if(ctx==null){
try{
PathMatchingResourcePatternResolver prp = new PathMatchingResourcePatternResolver();
Resource[] platformResources = prp.getResources(filePath);
if(platformResources.length>0){
ctx = new ClassPathXmlApplicationContext(platformResources[0].getURL().toString());
}
}catch(Exception e){
e.printStackTrace();
ctx = null;
}
}
return ctx;
}
}
分享到:
相关推荐
Spring个人总结,基于Annotation注解的方式开发,配置
2. 创建Spring容器对象ApplicationContext,加载各种配置 3. 在容器创建前,通过监听器机制,应对不同阶段加载数据、更新数据的需求 4. 容器初始化过程中追加各种功能,例如统计时间、输出日志等 监听器类型 1. 在...
spring动态向容器中添加bean和删除指定bean,不需要重启应用
使用了dom4j相关包,spring通过反射机制实现bean的创建等,完成bean的管理
1. Spring容器的启动流程 2. 循环依赖 3. Spring 中Bean的创建 4. Spring 方法xmind脑图
Spring实现原理、IoC容器的优点及在Eclipse 中创建Spring的 Web应用
3、在创建Spring容器,也就是启动Spring时: (1)首先会进行扫描得到所有的Bean Definition对象,并存在一个MAP中 (2)然后筛选出非懒加载的单例Bean Definition 对象进行创建Bean,多实例的Bean会在每次获取Bean时利用...
文章目录Spring总结Spring容器控制反转(IoC)基于XML的IoC Spring总结 Spring容器 什么是Spring容器 从概念上讲:Spring 容器是 Spring框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们...
Spring注解驱动开发第41讲——Spring IOC容器创建源码解析(一)之BeanFactory的创建以及预准备工作(合起来整个过程)
主要介绍了Spring创建IOC容器的方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
利用Spring Context上下文创建自定义对象,学习Spring的IoC容器如何使用控制反转创建一个对象,了解Spring控制反转原理
.ioc底层原理使用技术 (1)xml配置文件 (2)dom4j解析xml (3)工厂设计模式 (4)反射
ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...
Spring IOC容器的创建流程图
* lazy-init为“default/false”当启动spring容器的时候创建bean 但是如果该bean是prototype时,特殊。这种情况无效 * 在spring容器启动的时候,就会发现错误 * 有可能会造成一些数据长时间驻留在内存中 * lazy...
在spring框架中对象实例改由spring框架创建,spring容器负责控制程序之间的关系,这就是spring的控制反转。在spring容器的角度看来,spring容器负责将被依赖对象赋值给成员变量,这相当于为实例对象注入了它所依赖的...
Spring介绍 1. Spring 2. 使用spring的主要目的 3. Spring的模块 Ejb容器(以前是) Ioc容器(现在的控制权) 控制反转Ioc(Invertion of control)依赖注入(Dependency Injection) 4. Ioc容器作用 5. Spring中注入方式 ...
也就是说,对于某个具体的对象而言,以前是由自己控制它所引用对象的生命周期,而在IOC中,所有的对象都被 Spring 控制,控制对象生命周期的不再是引用它的对象,而是Spring容器,由 Spring 容器帮我们创建、查找及...
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. spring的设计思想是,单例模式和工厂模式 2 spring的四大特点(优点) 轻量级,...