ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Application Context
    Framework/SPRING 2020. 4. 10. 23:38

    1. Overview

    Application-context in spring means nothing but it is the core component of spring container in spring framework. Ideally, we can say application-context one of the Spring Containers in Spring Framework and another container is bean-factory. The configuration for application-context is loaded by one of the concrete implementations of ApplicationContext interface.

    The ApplicationContext is the central interface within a Spring Application for providing configuration information to the application. It is read-only at run time but can be reloaded if necessary and supported by the application.

    2. Description

    2.1 Responsibility

    • It provides bean factory methods for accessing application components.
    • Bean factory methods for accessing application components
    • The ability to load file resources in a generic way
    • The ability to publish events to registered listeners
    • The ability to resolve messages, supporting internationalization

    2.2 Creating one application-context

    2.2.1 AnnotationConfigApplicationContext

    Loads a Spring application context from one or more Java-Based configuration classes.

    ApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);

    AnnotationConfigWebApplicationContext

    Loads a Spring web application context from one or more Java-Based configuration classes.

    ApplicationContext context = new AnnotationConfigWebApplicationContext(JavaWebConfig.class);

    2.2.3 ClassPathXMLApplicationContext

    Loads a context definition from one or more XML files located in the classpath

    ApplicationContext context = new ClassPathXMLApplicationContext("spingConfig.xml");

    2.2.4 FileSystemXMLApplicationContext

    Loads a context definition from one or more XML files located in the filesystem.

    ApplicationContext context = new FileSystemXMLApplicationContext("c:/spingConfig.xml");

    2.2.5 XMLWebApplicationContext

    Loads a context definition from one or more XML files contained in the web application.

    ApplicationContext context = new XMLWebApplicationContext("/WEB-INF/config/spingConfig.xml");

    2.3 Accessing Application Context

    2.3.1 Application Structure

    build.gradle
    gradlew
    gradlew.bat
    settings.gradle
    src
    ├───main
    │   ├───java
    │   │   └───com
    │   │       └───zetcode
    │   │           │   Application.java
    │   │           └───bean
    │   │                   MyBean.java
    │   └───resources
    │           application.yml
    └───test
        ├───java
        └───resources

    2.3.2 build.gradle

    plugins {
        id 'java'
        id 'org.springframework.boot' version '2.2.2.RELEASE'
        id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    }
    
    group 'com.zetcode'
    version '1.0-SNAPSHOT'
    
    sourceCompatibility = 11
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
    }

    2.3.3 resources/application.yml

    spring:
      main:
        banner-mode: "off"
        log-startup-info: "false"
      
      application:
          name: "My application"

    2.3.4 com/zetcode/bean/MyBean.java

    package com.zetcode.bean;
    
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyBean implements ApplicationContextAware {
    
        private String applicationId;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) 
                throws BeansException {
    
            applicationId = applicationContext.getId();
        }
    
        public String getApplicationId() {
    
            return applicationId;
        }
    }

    2.3.5 com/zetcode/Application.java

    package com.zetcode;
    
    import com.zetcode.bean.MyBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.ApplicationContext;
    
    @SpringBootApplication
    public class Application implements CommandLineRunner {
    
        @Autowired
        private ApplicationContext applicationContext;
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        @Override
        public void run(String... args) throws Exception {
    
            System.out.println(applicationContext.getDisplayName());
            System.out.println(applicationContext.getId());
    
            MyBean myBean = applicationContext.getBean(MyBean.class);
            System.out.println(myBean.getApplicationId());
        }
    }

    The @SpringBootApplication annotation enables auto-configuration and component scanning. Spring Boot finds the MyBean annotation and loads it into the application context bean factory.

    @SpringBootApplication
    public class Application implements CommandLineRunner {

    With the @Autowired annotation we inject our ApplicationContext bean into the field. Now we can access the methods of the context.

    @Autowired
    private ApplicationContext applicationContext;

    We print the application context's display name and Id.

    MyBean myBean = applicationContext.getBean(MyBean.class);
    System.out.println(myBean.getApplicationId());

    We run the application with gradlew -q bootRun. From the output we can see, that we use the AnnotationConfigApplicationContext.

    3. Reference

    http://zetcode.com/springboot/applicationcontext/

    http://zetcode.com/springboot/applicationcontext/

    https://stackoverflow.com/questions/19615972/application-context-what-is-this

    https://www.dineshonjava.com/what-is-meant-by-application-context-and-how-do-you-create-one/

    'Framework > SPRING' 카테고리의 다른 글

    Comparison between Field, Setter, and Constructor Injection  (0) 2020.05.23
    Bean Definition Overriding  (0) 2020.05.23
    Portable Service Abstraction (PSA)  (0) 2020.03.06
    Dependency Injection (DI)  (0) 2020.03.05
    Spring Inversion of Control (IoC)  (0) 2020.02.06

    댓글

Designed by Tistory.