diff --git a/spring-core-4/pom.xml b/spring-core-4/pom.xml
index e5aee1f81d..df0b90fef2 100644
--- a/spring-core-4/pom.xml
+++ b/spring-core-4/pom.xml
@@ -24,6 +24,16 @@
spring-core
${spring.version}
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.version}
+
org.springframework
spring-expression
@@ -69,6 +79,12 @@
${assertj-core.version}
test
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.0
+
+
diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java
new file mode 100644
index 0000000000..d4c960bd68
--- /dev/null
+++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountConfig.java
@@ -0,0 +1,28 @@
+package com.baeldung.applicationcontext;
+
+import org.springframework.context.MessageSource;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.support.ResourceBundleMessageSource;
+
+@Configuration
+public class AccountConfig {
+
+ @Bean
+ public AccountService accountService() {
+ return new AccountService(accountRepository());
+ }
+
+ @Bean
+ public AccountRepository accountRepository() {
+ return new AccountRepository();
+ }
+
+ @Bean
+ public MessageSource messageSource() {
+ ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
+ messageSource.setBasename("config/messages");
+ return messageSource;
+ }
+
+}
diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java
new file mode 100644
index 0000000000..f15475acf3
--- /dev/null
+++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountRepository.java
@@ -0,0 +1,5 @@
+package com.baeldung.applicationcontext;
+
+public class AccountRepository {
+
+}
diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java
new file mode 100644
index 0000000000..c8b58915a8
--- /dev/null
+++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/AccountService.java
@@ -0,0 +1,32 @@
+package com.baeldung.applicationcontext;
+
+import java.util.Locale;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.MessageSource;
+
+public class AccountService {
+
+ @Autowired
+ private AccountRepository accountRepository;
+
+ @Autowired
+ private MessageSource messageSource;
+
+ public void setAccountRepository(AccountRepository accountRepository) {
+ this.accountRepository = accountRepository;
+ }
+
+ public AccountRepository getAccountRepository() {
+ return accountRepository;
+ }
+
+ public AccountService(AccountRepository accountRepository) {
+ this.accountRepository = accountRepository;
+ }
+
+ public String getAccountName() {
+ return messageSource.getMessage("account.name", null, Locale.ENGLISH);
+ }
+
+}
diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java
new file mode 100644
index 0000000000..0296910311
--- /dev/null
+++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyWebApplicationInitializer.java
@@ -0,0 +1,24 @@
+package com.baeldung.applicationcontext;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+
+public class MyWebApplicationInitializer implements WebApplicationInitializer {
+
+ public void onStartup(ServletContext container) throws ServletException {
+ AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+ context.register(AccountConfig.class);
+ context.setServletContext(container);
+
+ ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(context));
+ servlet.setLoadOnStartup(1);
+
+ servlet.addMapping("/");
+ }
+
+}
diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java
new file mode 100644
index 0000000000..fe681f1784
--- /dev/null
+++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/MyXmlWebApplicationInitializer.java
@@ -0,0 +1,24 @@
+package com.baeldung.applicationcontext;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+
+import org.springframework.web.WebApplicationInitializer;
+import org.springframework.web.context.support.XmlWebApplicationContext;
+import org.springframework.web.servlet.DispatcherServlet;
+
+public class MyXmlWebApplicationInitializer implements WebApplicationInitializer {
+
+ public void onStartup(ServletContext container) throws ServletException {
+ XmlWebApplicationContext context = new XmlWebApplicationContext();
+ context.setConfigLocation("/WEB-INF/spring/applicationContext.xml");
+ context.setServletContext(container);
+
+ ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(context));
+ servlet.setLoadOnStartup(1);
+
+ servlet.addMapping("/");
+ }
+
+}
diff --git a/spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java b/spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java
new file mode 100644
index 0000000000..b63d6828a7
--- /dev/null
+++ b/spring-core-4/src/main/java/com/baeldung/applicationcontext/UserService.java
@@ -0,0 +1,10 @@
+package com.baeldung.applicationcontext;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class UserService {
+
+ // user service code
+
+}
diff --git a/spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java b/spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java
new file mode 100644
index 0000000000..491d5dd9d0
--- /dev/null
+++ b/spring-core-4/src/test/java/com/baeldung/applicationcontext/ApplicationContextUnitTest.java
@@ -0,0 +1,71 @@
+package com.baeldung.applicationcontext;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+
+import org.junit.Ignore;
+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.FileSystemXmlApplicationContext;
+
+public class ApplicationContextUnitTest {
+
+ @Test
+ public void givenAnnotationConfigAppContext_whenSpringConfig_thenMappingSuccess() {
+ ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class);
+ AccountService accountService = context.getBean(AccountService.class);
+
+ assertNotNull(accountService);
+ assertNotNull(accountService.getAccountRepository());
+
+ ((AnnotationConfigApplicationContext) context).close();
+ }
+
+ @Test
+ public void givenClasspathXmlAppContext_whenAnnotationConfig_thenMappingSuccess() {
+ ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/user-bean-config.xml");
+ UserService userService = context.getBean(UserService.class);
+
+ assertNotNull(userService);
+
+ ((ClassPathXmlApplicationContext) context).close();
+ }
+
+ @Test
+ @Ignore
+ public void givenFileXmlAppContext_whenXMLConfig_thenMappingSuccess() {
+ String path = "D:/workspaces/Baeldung/tutorials/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml";
+
+ ApplicationContext context = new FileSystemXmlApplicationContext(path);
+ AccountService accountService = context.getBean("accountService", AccountService.class);
+
+ assertNotNull(accountService);
+ assertNotNull(accountService.getAccountRepository());
+
+ ((FileSystemXmlApplicationContext) context).close();
+ }
+
+ @Test
+ public void givenClasspathXmlAppContext_whenXMLConfig_thenMappingSuccess() {
+ ApplicationContext context = new ClassPathXmlApplicationContext("applicationcontext/account-bean-config.xml");
+ AccountService accountService = context.getBean("accountService", AccountService.class);
+
+ assertNotNull(accountService);
+ assertNotNull(accountService.getAccountRepository());
+
+ ((ClassPathXmlApplicationContext) context).close();
+ }
+
+ @Test
+ public void givenMessagesInFile_whenMessageResourceUsed_thenReadMessage() {
+ ApplicationContext context = new AnnotationConfigApplicationContext(AccountConfig.class);
+ AccountService accountService = context.getBean(AccountService.class);
+
+ assertEquals("TestAccount", accountService.getAccountName());
+
+ ((AnnotationConfigApplicationContext) context).close();
+ }
+
+}
diff --git a/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml b/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml
new file mode 100644
index 0000000000..eef434928f
--- /dev/null
+++ b/spring-core-4/src/test/resources/applicationcontext/account-bean-config.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml b/spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml
new file mode 100644
index 0000000000..9779d64270
--- /dev/null
+++ b/spring-core-4/src/test/resources/applicationcontext/user-bean-config.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/spring-core-4/src/test/resources/config/messages.properties b/spring-core-4/src/test/resources/config/messages.properties
new file mode 100644
index 0000000000..7d5a4baa73
--- /dev/null
+++ b/spring-core-4/src/test/resources/config/messages.properties
@@ -0,0 +1 @@
+account.name=TestAccount