diff --git a/spring-core-3/pom.xml b/spring-core-3/pom.xml
index cd82f23320..ac6d1b2b3b 100644
--- a/spring-core-3/pom.xml
+++ b/spring-core-3/pom.xml
@@ -1,72 +1,88 @@
- 4.0.0
- spring-core-3
- spring-core-3
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+ spring-core-3
+ spring-core-3
-
- com.baeldung
- parent-spring-5
- 0.0.1-SNAPSHOT
- ../parent-spring-5
-
+
+ com.baeldung
+ parent-spring-5
+ 0.0.1-SNAPSHOT
+ ../parent-spring-5
+
-
-
- org.springframework
- spring-beans
- ${spring.version}
-
-
- org.springframework
- spring-context
- ${spring.version}
-
-
- org.springframework
- spring-core
- ${spring.version}
-
-
- javax.annotation
- javax.annotation-api
- ${annotation-api.version}
-
-
- org.springframework
- spring-test
- ${spring.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-engine
- ${junit-jupiter.version}
- test
-
-
- org.junit.jupiter
- junit-jupiter-api
- ${junit-jupiter.version}
- test
-
-
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring.boot.version}
+
+
+ org.springframework
+ spring-tx
+ ${spring.version}
+
+
+ org.springframework
+ spring-jdbc
+ ${spring.version}
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
+
+
+ org.springframework
+ spring-context
+ ${spring.version}
+
+
+ org.springframework
+ spring-core
+ ${spring.version}
+
+
+ javax.annotation
+ javax.annotation-api
+ ${annotation-api.version}
+
+
+ org.springframework
+ spring-test
+ ${spring.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-engine
+ ${junit-jupiter.version}
+ test
+
+
+ org.junit.jupiter
+ junit-jupiter-api
+ ${junit-jupiter.version}
+ test
+
+
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven.surefire.version}
-
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven.surefire.version}
+
+
+
-
- 2.22.1
- 1.3.2
-
+
+ 2.22.1
+ 1.3.2
+ 2.2.2.RELEASE
+
\ No newline at end of file
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java
new file mode 100644
index 0000000000..8f0134d83c
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Application.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+
+public class Application {
+
+ @SuppressWarnings("resource")
+ public static void main(String[] args) {
+
+ ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class);
+
+ Foo foo = context.getBean(Foo.class);
+ Bar bar = context.getBean(Bar.class, "Some name");
+
+ System.out.println(foo);
+ System.out.println("Bar's name: " + bar.getName());
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java
new file mode 100644
index 0000000000..626947cfd5
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/ApplicationConfig.java
@@ -0,0 +1,9 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@ComponentScan(basePackageClasses = ApplicationConfig.class)
+public class ApplicationConfig {
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java
new file mode 100644
index 0000000000..8bd742c481
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Bar.java
@@ -0,0 +1,20 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+@Component
+@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+public class Bar {
+
+ private String name;
+
+ public Bar(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java
new file mode 100644
index 0000000000..5edba6c50d
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/factory/Foo.java
@@ -0,0 +1,7 @@
+package com.baeldung.spring.patterns.factory;
+
+import org.springframework.stereotype.Component;
+
+@Component
+public class Foo {
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java
new file mode 100644
index 0000000000..d00f51ec96
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java
new file mode 100644
index 0000000000..112396e232
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/Book.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.proxy;
+
+public class Book {
+
+ private String author;
+
+ public Book(String author) {
+ this.author = author;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java
new file mode 100644
index 0000000000..ab192826b8
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookController.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class BookController {
+
+ @Autowired
+ private BookManager manager;
+
+ @PostMapping("/book")
+ public Book create(@RequestParam String author) {
+ return manager.create(author);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java
new file mode 100644
index 0000000000..d82218e404
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookManager.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class BookManager {
+
+ @Autowired
+ private BookRepository repository;
+
+ @Transactional
+ public Book create(String author) {
+ System.out.println(repository.getClass().getName());
+ return repository.create(author);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java
new file mode 100644
index 0000000000..b100bc0a61
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/proxy/BookRepository.java
@@ -0,0 +1,11 @@
+package com.baeldung.spring.patterns.proxy;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class BookRepository {
+
+ public Book create(String author) {
+ return new Book(author);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java
new file mode 100644
index 0000000000..5d7545790a
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Application.java
@@ -0,0 +1,12 @@
+package com.baeldung.spring.patterns.singleton;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java
new file mode 100644
index 0000000000..31d9d83683
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/Book.java
@@ -0,0 +1,4 @@
+package com.baeldung.spring.patterns.singleton;
+
+public class Book {
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java
new file mode 100644
index 0000000000..aa4bdb8371
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookController.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.patterns.singleton;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class BookController {
+
+ @Autowired
+ private BookRepository repository;
+
+ @GetMapping("/book/{id}")
+ public Book findById(@PathVariable long id) {
+ System.out.println(repository);
+ return repository.findById(id).get();
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java
new file mode 100644
index 0000000000..3fde153f31
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/BookRepository.java
@@ -0,0 +1,17 @@
+package com.baeldung.spring.patterns.singleton;
+
+import java.util.Optional;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class BookRepository {
+
+ public long count() {
+ return 1;
+ }
+
+ public Optional findById(long id) {
+ return Optional.of(new Book());
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java
new file mode 100644
index 0000000000..76e273e2fb
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/singleton/LibraryController.java
@@ -0,0 +1,18 @@
+package com.baeldung.spring.patterns.singleton;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class LibraryController {
+
+ @Autowired
+ private BookRepository repository;
+
+ @GetMapping("/count")
+ public Long findCount() {
+ System.out.println(repository);
+ return repository.count();
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java
new file mode 100644
index 0000000000..d601f01c67
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/Book.java
@@ -0,0 +1,32 @@
+package com.baeldung.spring.patterns.template;
+
+public class Book {
+
+ private long id;
+ private String title;
+ private String author;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+}
diff --git a/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java
new file mode 100644
index 0000000000..3fe7bb8e59
--- /dev/null
+++ b/spring-core-3/src/main/java/com/baeldung/spring/patterns/template/BookRowMapper.java
@@ -0,0 +1,21 @@
+package com.baeldung.spring.patterns.template;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.springframework.jdbc.core.RowMapper;
+
+public class BookRowMapper implements RowMapper {
+
+ @Override
+ public Book mapRow(ResultSet rs, int rowNum) throws SQLException {
+
+ Book book = new Book();
+
+ book.setId(rs.getLong("id"));
+ book.setTitle(rs.getString("title"));
+ book.setAuthor(rs.getString("author"));
+
+ return book;
+ }
+}