项目中ApplicationContext
applicationContext说白了就是对beanFactory的扩展,也就是一个spring容器,而且applicationContext是单例的,项目中主要包含一个webApplicationContext和spring的DispatchServlet的一个容器。
一.系统提供数据初始化即build的时候怎么把这些bean注入到spring容器中
因为运行build,这不是一个web工程,不会解析web.xml,所以通过一个ApplicationContextFactory这个工厂类来启动一个spring容器:
public final class ApplicationContextFactory {
private static ApplicationContextFactory instance;
private Map<String,ApplicationContext> contexts=new HashMap<String,ApplicationContext>();
private ApplicationContextFactory(){
}
public static ApplicationContextFactory getInstance(){
if (instance==null){
instance=new ApplicationContextFactory();
}
return instance;
}
public ApplicationContext getApplicationContext(){
String type=System.getProperty("spring.profiles.active");
ApplicationContext result=contexts.get(type);
if (result==null){
result=new ClassPathXmlApplicationContext(
"classpath*:/applicationContext.xml");
contexts.put(type, result);
}
return result;
}
public Object getBean(String beanName){
return getApplicationContext().getBean(beanName);
}
}
注入各个applicationContext.xml的bean,然后在build中执行这些相关bean的init方法。
@Component
@AppInitRunner
public class SystemBuild extends InitializationsRunner { @Autowired
private DatabaseInitManager databaseInitManager;
@Autowired
private SessionInitManager sessionInitManager;
@Autowired
private PropertiesInitManager propertiesInitManager;
@Autowired
private PermissionInitManager permissionInitManager;
@Autowired
private OrganizationInitManager organizationInitManager; @Autowired
private RoleInitManager roleInitManager;
@Autowired
private JobInitManager jobInitManager;
@Autowired
private ProcessInitManager processInitManager; @Autowired
private MemcachedClient memcachedClient; @Override
public void executeInitialization() throws Exception { memcachedClient.flushAll(); databaseInitManager.init();
sessionInitManager.init();
propertiesInitManager.init();
permissionInitManager.init();
organizationInitManager.init();
roleInitManager.init();
jobInitManager.init();
processInitManager.init(); memcachedClient.shutdown();
System.exit(0);
} public static void building(String[] args) {
try {
Map<String, Object> map = ApplicationContextFactory.getInstance()
.getApplicationContext()
.getBeansWithAnnotation(AppInitRunner.class);
for (Entry<String, Object> entry : map.entrySet()) {
((InitializationsRunner) entry.getValue())
.executeInitialization();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
二.web工程加载ApplicationContext
1.在web.xml中通过listener启动容器,这个webApplicationContext即rootContext,这里面主要是管理各个applicationContext.xml中注入的bean主要是一些工具类,DAO等
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2.spring 本身的DispatchServlet就有一个容器,这个主要用来管理spring-mvc.xml中的bean,还有包括系统中打上@component/controller/service等的bean(主要是service&&controller)。这个Applicationcontext的parentContext就是上面提到的rootContext ,当子applicationContext中找不到相关bean时,会自动去父applicationContext中去寻找。
项目中ApplicationContext的更多相关文章
- 项目中运行报错: Loading XML bean definitions from class path resource [applicationContext.xml]
记录一下: org.springframework.context.support.AbstractApplicationContext prepareRefresh Refreshing org.s ...
- Spring Scope:Web项目中如何安全使用有状态的Bean对象?
Web系统是最常见的Java应用系统之一,现在流行的Web项目多使用ssm或ssh框架,使用spring进行bean的管理,这为我们编写web项目带来了很多方便,通常,我们的controler层使用注 ...
- Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明
Atitit.mybatis的测试 以及spring与mybatis在本项目中的集成配置说明 1.1. Mybatis invoke1 1.2. Spring的数据源配置2 1.3. Mybatis ...
- web项目中加入struts2、spring的支持,并整合两者
Web项目中加入struts2 的支持 在lib下加入strut2的jar包 2. 在web.xml中添加配置 <filter> <filter-name>struts2< ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- web项目中 集合Spring&使用junit4测试Spring
web项目中 集合Spring 问题: 如果将 ApplicationContext applicationContext = new ClassPathXmlApplicationContext(& ...
- 06_在web项目中集成Spring
在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = ...
- 控制反转和spring在项目中可以带来的好处
Spring实例化Bean的三种方式分别是: 1,xml配置使用bean的类构造器 <bean id="personService" class="cn.servi ...
- Axis2在Web项目中整合Spring
一.说明: 上一篇说了Axis2与Web项目的整合(详情 :Axis2与Web项目整合)过程,如果说在Web项目中使用了Spring框架,那么又改如何进行Axis2相关的配置操作呢? 二.Axis2 ...
随机推荐
- 如何使用wait(), notify() and notifyAll() – Java
Java多线程是个很复杂的问题,尤其在多线程在任何给定的时间访问共享资源需要更加注意.Java 5引入了一些类比如BlockingQueue 和Executors 类提供了易于使用的API,避免了一些 ...
- 删除iPhone图片,提示“没有删除此项目的权限”
解决方法:设置-照片与相机-iCloud照片图库-关闭 (IOS10)
- ES6中的export以及import的使用多样性
模块功能主要由两个命令构成:export和import.export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能. 一.export导出模块使用部分的几种方式 一个模块就是一 ...
- JavaScript中的栈及通过栈操作的实例
<script> /*栈操作*/ function Stack() { this.dataStore = []; this.top = 0; this.push = push; this. ...
- java的三大特性,封装,继承,多态
封装 /** * 所谓封装,就是将对象具有的成员变量和成员函数包装和隐藏起来,让外界无法直接使用, * 被封装的成员只能通过某些特定的方式才能访问. * 实现封装有两个步骤: * 1.将不能暴露的 ...
- H5 data-*容易忽略的问题
H5添加了data-*属性,非常方便 但经常忽略小写的问题, H5要求属性名全部小写,驼峰式命名的习惯掉坑了 测试代码如下: <html> <head> <script ...
- jqueryEasyUI列表
背景 因为学习大数据开发这段时间,同时也学习java的一些知识.利用了近五个月的时间来投入学习,当然我选择了一个机构,因为已经做了四年多的开发,所以即使不是做的java但是java还是了解的,这段时间 ...
- VB6之调整任务栏按钮的位置
好无聊,睡前一更~ XP的任务栏没办法像win7那样随意拖动交换顺序,偶觉不爽,遂写程序搞之.这个不算什么新东西,参考了很多别人写的东东. 程序启动后,会在右下角托盘区显示钢铁侠的图标.右键击之,可选 ...
- SpringEL 表达式错误记录
原因暂时未知....
- lvs讲解
作者写的就是好呀,简单明了,安逸的我也不知道早点看看,非得等到找工作了,在这里临时抱佛脚,以后再过来添加我自己的总结 http://www.linuxvirtualserver.org/zh/