Spring Dependency Injection and Inversion of Control Container Concepts: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 20: Line 20:
This section refers to component configuration. Configuration as in external data that is provided to the application in form of properties or environment variables, and that potentially modifies the behavior of the application, is addressed in the "[[Spring_Application_Configuration_Concepts|Application Configuration Concepts]]" section.
This section refers to component configuration. Configuration as in external data that is provided to the application in form of properties or environment variables, and that potentially modifies the behavior of the application, is addressed in the "[[Spring_Application_Configuration_Concepts|Application Configuration Concepts]]" section.


<span id='Configuration_Metadata'></span>'''Configuration Metadata'''
==Configuration Metadata==


====XML-based Configuration====
===XML-based Configuration===


<font color=darkgray>Representative example of an XML configuration file.</font>
<font color=darkgray>Representative example of an XML configuration file.</font>


====Java-based Configuration====
===Java-based Configuration===
 
[[@Configuration]] and a Configuration class.


Java-based configuration can achieve the same results as [[#XML-based_Configuration|XML-based configuration]], and it is an alternative to it.
Java-based configuration can achieve the same results as [[#XML-based_Configuration|XML-based configuration]], and it is an alternative to it.
Line 36: Line 34:
Configuration time. <font color=darkgray>Define what that is.</font>
Configuration time. <font color=darkgray>Define what that is.</font>


====Autoconfiguration====
====Configuration Class====
 
[[@Configuration]]
 
==Autoconfiguration==


Both [[#XML-based_Configuration|XML-based configuration]] and [[#Java-based_Configuration|Java-based configuration]] are often unnecessary, as Spring is capable of automatically configuring its components. Automatic configuration employs Spring techniques such as [[#Autowiring|autowiring]] and [[#Component_Scanning|component scanning]].<font color=darkgray> Clarify the relationship with  [[Spring_Boot_Concepts#Autoconfiguration|Spring Boot autoconfiguration]].</font>
Both [[#XML-based_Configuration|XML-based configuration]] and [[#Java-based_Configuration|Java-based configuration]] are often unnecessary, as Spring is capable of automatically configuring its components. Automatic configuration employs Spring techniques such as [[#Autowiring|autowiring]] and [[#Component_Scanning|component scanning]].<font color=darkgray> Clarify the relationship with  [[Spring_Boot_Concepts#Autoconfiguration|Spring Boot autoconfiguration]].</font>

Revision as of 06:15, 10 October 2018

Internal

Overview

At the heart of the Spring Framework is the core container, which comes with a configuration model and a dependency injection mechanism. Support for different application architectures, including messaging, transactions and persistence is built in top of the core container.

Inversion of Control Container

Dependency Injection

Rather than have individual components create and manage the lifecycle of their dependency components, a dependency-injected application relies on container to first create all components, then to inject them into other components that need them. Injection is typically done through constructor arguments or property setters.


Spring Dependency Injection Framework

Configuration Model

This section refers to component configuration. Configuration as in external data that is provided to the application in form of properties or environment variables, and that potentially modifies the behavior of the application, is addressed in the "Application Configuration Concepts" section.

Configuration Metadata

XML-based Configuration

Representative example of an XML configuration file.

Java-based Configuration

Java-based configuration can achieve the same results as XML-based configuration, and it is an alternative to it.

Annotation injection is performed before XML injection, thus the XML configuration overrides the annotations for properties wired through both approaches.

Configuration time. Define what that is.

Configuration Class

@Configuration

Autoconfiguration

Both XML-based configuration and Java-based configuration are often unnecessary, as Spring is capable of automatically configuring its components. Automatic configuration employs Spring techniques such as autowiring and component scanning. Clarify the relationship with Spring Boot autoconfiguration.

Component Scanning

Spring runtime capability to automatically discover components from an application's classpath and create them as beans in the application context. This lets you declare classes with annotations like @Component, @Controller, @Service, etc. to have Spring automatically discover them and register them as components in the application context. Component scanning is enabled by @ComponentScan.

Autowiring

Spring runtime capability to automatically inject components within other beans that they depend on. @Autowired

Application Context

https://docs.spring.io/spring-framework/docs/5.1.0.RELEASE/javadoc-api/org/springframework/context/ApplicationContext.html

The application context provides:

  • Bean factory functionality, inherited from ListableBeanFactory.
  • Ability to load file resources, inherited from ResourceLoader.
  • Ability to publish events to registered listeners, inherited from ApplicationEventPublisher.
  • Ability to resolve messages, inherited from MessageSource.
  • Inheritance from a parent context.

The application context is created during the bootstrapping phase of a Spring application.

Is the Spring container and application context one and the same thing? Some texts claim so.

Beans

Any non-trivial application consists of many components, each responsible for its own piece of the overall application functionality. These components coordinate with each other. Spring names these these components beans. The Spring container creates and introduces the beans to each other.

Bean Name

Bean ID

Bean alias

Collaborator beans

Describe bean initialization process. Who does it?

Stereotypes.

@Bean What is the fundamental difference between @Bean and the rest (@Component, etc.)?

@Component

@Controller

@Service

@Repository