欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

探究spring:1.applicationContext初始化

程序员文章站 2022-05-21 19:22:14
...

参考书籍:spring4.x企业应用开发实践

开发环境:idea2019.1.3 spring5.1.7 mysql8.0.13

 

理论:第4章里讲到beanFactory,初步认知就是,beanFactory通过先内输入配置文件,向外输出bean类,以此达到控制反转的目的,不再需要自己创建bean类,bean类由spring容器来创建。

实现:先通过resourcePatternResolver来装载bean的配置文件,之后创建一个defaultListableBeanFactory,在beanfactory中加载resource。

理论:在beanFactory的基础上,创建了一个applicationContext来继承beanFactory,并添加了更多的功能,applicationContext可以直接通过路径加载配置文件,或者通过基于类注解的方式。

基于路径:

ApplicationContext ctx =
        new ClassPathXmlApplicationContext("beansFactory/beans3.xml");
        //new FileSystemXmlApplicationContext("G:/WebProject/springWorkSpace/chapter1/src/main/resources/beansFactory/beans3.xml");

基于类注解的方式:

先创建一个bean

@Configuration
public class userBean {

    @Bean(name = "testUser")
    public testUser builderuserBean(){
        testUser testuser = new testUser();
        testuser.setPassword("111111");
        testuser.setUsername("Lisi3");
        return testuser;
    }
}

第二步,把这个类调用到 

AnnotationConfigApplicationContext

具体是

@Test
public void getBeanByInvoke() {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(userBean.class);
    testUser testuser = ctx.getBean("testUser",testUser.class);
}

个人理解是把类加载到applicationcontext中,通过里面的@Bean注释来表名这个是个bean,然后解析调用。

理论:再进一步,在applicationContext的基础上构建一个更加高级的webapplicationContext,它在原来的基础上面向web应用添加了很多功能。先介绍一下webapp的原理:

部署启动tomcat后,tomcat会通过xml配置文件来识别webapps下的各个web应用,先创建一个servletContext,然后读取xml,然后创建一个xml的实例,xml里面包括了servletContext的配置信息和serlvet的配置信息,通过servletConfig来装配xml里的信息,然后创建servlet,可以说servlet里面包含了很多的配置文件,同时每个web应用对应一个单独的servletContext,web应用下的servlet可以通过这个servletContext来交换信息。

webapplicationContext也就是通过这个servletContext来和webapp产生联系,在servletContext启动之后,webapplicationContext把一个键值对放入到servletContext中,键名为ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,键值为webaoolicationContext的对象,通过这样把两个联系起来。

实践:在web应用的配置文件web.xml中添加方法来调用webapplicationContext的实例,第一种方法,使用ContextLoaderListener,添加

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:smart-context.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

第一行是表名webapplicationContext的配置文件的位置,第二个listener是启动webapplicationContext来寻找配置文件的信息

第二种,在不支持监听器的低版本web容器中,通过

<servlet>
    <servlet-name>springContextLoaderServlet</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

但是在我实际使用中,发现我的org.springframework.web.context下没有这个类,猜测是我的版本的问题。

第三种,通过类解释的java文件作为配置文件,

未尝试(不知道如何写java类作为配置文件)

相关标签: spring