Spring-ApplicationContext
来源:互联网 发布:windows小键盘 编辑:程序博客网 时间:2024/05/18 16:19
ApplicationContext介绍
Application由BeanFactory派生而来,提供了更多面向实际应用的功能,在BeanFactory中,很多功能都需要以编程的形式实现,但是在Application中则可以通过配置的方式实现。
ApplicationContext类体系结构
ApplicationContext的主要实现类是ClassPathXmlApplicationContext和FileSystemXmlApplicationContext,前者默认从类路径加载配置文件,后者默认从文件系统中装载配置文件。
ApplicationEventPublisher:让容器拥有发布应用上下文事件的功能,包括容器的启动事件、关闭事件等。
MessageSource:为应用提供i18N国际化消息访问的功能。
ResourcePatternResolver:所有ApplicationContext实现类都实现了类似于PathMatchingResourcePatternResolver的功能,可以通过带前缀的Ant风格的资源文件路径装载Spring的配置文件。
LifeCycle:该接口提供start()和stop()方法,主要用于控制异步处理的过程。在具体使用时,该接口同时被ApplicationContext实现及具体Bean实现,ApplicationContext会将start/stop的信息传递给容器中所有实现了该接口的Bean,以达到管理和控制JMX、任务调度等目的。
ConfigurableApplicationContext扩展于ApplicationContext,它新增了两个主要的方法 refresh()和close(),让ApplicationContext具有启动、刷新、关闭应用上下文的能力。在ApplicationContext关闭的情况下调用refresh()即可启动ApplicationContext,在已经启动的状态下调用refresh()则可清除缓存并重新装载配置信息,而调用close()则可关闭ApplicationContext。
初始化ApplicationContext
如果配置文件在类路径下,则使用其ClassPathXmlApplicationContext实现类。
如果配置文件在文件系统的路径下,则使用FileSystemXmlApplicationContext实现类。
Spring支持基于类注解的配置方式,一个标注@Configuration注解的POJO即可提供Spring所需的Bean配置信息,使用类注解的方式,需要使用AnnotationConfigApplicationContext实现类。与XML文件的配置方式相比,这种方式很容易地让开发者控制Bean的初始化过程,更加灵活。
Spring4.0支持Groovy DSL来进行Bean定义配置,其与基于XML文件的配置类似,只不过基于Groovy脚本语言,可以实现复杂、灵活的Bean配置逻辑。使用此种方式,需要使用GenericGroovyApplicationContext实现类。
示例:
XML配置文件
<?xml version="1.0" encoding="UTF-8"?><beans xmlns= "http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="user1" class="com.smart.context.User"> <property name="userName" value="Jack"></property> <property name="password" value="123"></property> </bean> <bean id="user2" class="com.smart.context.User" p:userName="Lucy" p:password="123"> </bean></beans>
Groovy脚本
package com.smart.context;beans{ user3(User){ //Bean名称(类型) userName="Devin" //注入属性 password="123" //注入属性 }}
User.java
package com.smart.context;public class User { 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; } @Override public String toString() { return "User [userName=" + userName + ", password=" + password + "]"; }}
Beans.java
package com.smart.context;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;//表示是一个配置信息提供类@Configurationpublic class Beans { //定义一个Bean @Bean(name = "user") public User buildUser() { User user = new User(); user.setUserName("Jack"); user.setPassword("123"); return user; }}
AppConfig.java
package com.smart.context;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.context.support.GenericGroovyApplicationContext;public class AppContext { @Test public void getBean() { ApplicationContext context = new AnnotationConfigApplicationContext(Beans.class); User user = context.getBean("user",User.class); System.out.println(user.toString()); } @Test public void getBean1() { ApplicationContext context = new ClassPathXmlApplicationContext("config/beans.xml"); User user = context.getBean("user2",User.class); System.out.println(user.toString()); } @Test public void getBean2() { ApplicationContext context = new GenericGroovyApplicationContext("classpath:config/beans.groovy"); User user = context.getBean("user3",User.class); System.out.println(user.toString()); }}
ApplicationContext初始化和BeanFactory有一个重大的区别:
BeanFactory在初始化容器时,并未实例化Bean,直到第一次访问某个Bean时才实例化目标而ApplicationContext则在初始化应用上下文时就实例化所有单实例的Bean。因此,ApplicationContext的初始化时间会比BeanFactory要长一些,不过调用时不用实例化那些单实例的Bean,所以快一些。
- Spring ApplicationContext
- spring ApplicationContext
- Spring ApplicationContext
- spring--ApplicationContext
- 【Spring】ApplicationContext
- Spring-ApplicationContext
- Spring 源码分析:ApplicationContext
- Spring--> ApplicationContext事件传播
- Spring 源码分析:ApplicationContext- -
- Spring Gossip: BeanFactory、ApplicationContext
- Spring配置初始化ApplicationContext
- Spring ApplicationContext 载入
- spring beans beanfactory applicationcontext
- Spring容器ApplicationContext
- Spring Bean ApplicationContext BeanFactory
- 【Spring】BeanFactory/ApplicationContext
- Spring中的ApplicationContext
- about spring applicationContext.xml
- c# Http Get Post Put Delete类整理
- 热修复Tinker的使用 + TinkerPatch补丁管理平台 gradle接入
- Spark2.2 Worker原理剖析图解及源码剖析
- paperweekly-迁移学习
- CORBA概述
- Spring-ApplicationContext
- 移动端H5页面截图【含 domtoimage、html2canvas 】
- Idea
- springBoot 动态数据源以及Mybatis多数据源
- 在其他数都出现偶数次的数组中找到出现奇数次的数
- 怎样理解阻塞非阻塞与同步异步的区别
- 高阶函数和匿名函数
- Unity3d
- JavaSE之面向对象编程-类与对象