Step 1:
Define a component
that implements ApplicationContextAware interface.
@Component public class ApplicationContextProvider implements ApplicationContextAware { private ApplicationContext applicationContext; public ApplicationContext getApplicationContext() { return applicationContext; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }
Step 2:
Inject ‘ApplicationContextProvider’
object in application class and get the ApplicationContext from getApplicationContext()
method of ApplicationContextProvider bean.
@Autowired private ApplicationContextProvider contextProvider; Employee emp1 = contextProvider.getApplicationContext().getBean("krishna", Employee.class);
Find the
below working application.
package com.sample.app.model; public class Employee { private int id; private String firstName; private String lastName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public void print() { StringBuilder builder = new StringBuilder(); builder.append("Employee [id=").append(id).append(", firstName=").append(firstName).append(", lastName=") .append(lastName).append("]"); System.out.println(builder.toString()); } }
EmployeeConfiguration.java
package com.sample.app.configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.sample.app.model.Employee; @Configuration public class EmployeeConfiguration { @Bean("krishna") public Employee newEmployee1() { Employee emp = new Employee(); emp.setId(1); emp.setFirstName("Krishna"); emp.setLastName("Majety"); return emp; } @Bean("ram") public Employee newEmployee2() { Employee emp = new Employee(); emp.setId(2); emp.setFirstName("Ram"); emp.setLastName("Gurram"); return emp; } }
ApplicationContextProvider.java
package com.sample.app.providers; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class ApplicationContextProvider implements ApplicationContextAware { private ApplicationContext applicationContext; public ApplicationContext getApplicationContext() { return applicationContext; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }
App.java
package com.sample.app; 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.annotation.Bean; import com.sample.app.model.Employee; import com.sample.app.providers.ApplicationContextProvider; @SpringBootApplication public class App { @Autowired private ApplicationContextProvider contextProvider; public static void main(String args[]) { SpringApplication.run(App.class, args); } @Bean public CommandLineRunner demo() { return (args) -> { Employee emp1 = contextProvider.getApplicationContext().getBean("krishna", Employee.class); Employee emp2 = contextProvider.getApplicationContext().getBean("ram", Employee.class); emp1.print(); emp2.print(); }; } }
application.properties
logging.level.root=WARN
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" 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"> <modelVersion>4.0.0</modelVersion> <groupId>springcore</groupId> <artifactId>springcore</artifactId> <version>1</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
Total
project structure looks like below.
Run
App.java, you can see below messages in console.
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.6.RELEASE) Employee [id=1, firstName=Krishna, lastName=Majety] Employee [id=2, firstName=Ram, lastName=Gurram]
You can
download complete working application from this link.
No comments:
Post a Comment