In
this post, you are going to learn different ways to import additional
configuration classes.
a. By defining the main
application class in top level package
b. By using @Import
annotation
By defining the main
application class in top level package
If
you define the spring boot main application class in top level package, it
automatically scans all the sub packages and automatically pick up all the
spring components including @Configuration classes.
package com.sample.myApp.model; public class Address { private String city; private String country; private String phoneNum; private String email; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Address [city=" + city + ", country=" + country + ", phoneNum=" + phoneNum + ", email=" + email + "]"; } }
Employee.java
package com.sample.myApp.model; import org.springframework.stereotype.Component; @Component 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; } @Override public String toString() { return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]"; } }
AddressConfiguration.java
package com.sample.myApp.Configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.sample.myApp.model.Address; @Configuration public class AddressConfiguration { @Bean public Address getDefaultAddress() { Address address = new Address(); address.setCity("NOT_INITIALIZED"); address.setCountry("NOT_INITIALIZED"); address.setEmail("NOT_INITIALIZED"); address.setPhoneNum("NOT_INITIALIZED"); return address; } }
EmployeeConfiguration.java
package com.sample.myApp.Configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.sample.myApp.model.Employee; @Configuration public class EmployeeConfiguration { @Bean public Employee getDefaultEmployee() { Employee emp = new Employee(); emp.setFirstName("NO_NAME"); emp.setId(-1); emp.setLastName("NO_NAME"); return emp; } }
Application.java
package com.sample.myApp; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.ConfigurableApplicationContext; import com.sample.myApp.model.Address; import com.sample.myApp.model.Employee; @SpringBootApplication public class Application { public static void main(String args[]) { ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args); Employee employee = (Employee) applicationContext.getBean("getDefaultEmployee"); Address address = (Address) applicationContext.getBean("getDefaultAddress"); System.out.println(employee); System.out.println(address); applicationContext.close(); } }
Output
Employee [id=-1, firstName=NO_NAME, lastName=NO_NAME] Address [city=NOT_INITIALIZED, country=NOT_INITIALIZED, phoneNum=NOT_INITIALIZED, email=NOT_INITIALIZED]
Project
structure looks like below.
By using @Import
annotation
By
using @Import annotation, you can aggregate all the configuration classes. If
the spring boot application class is not at the root level, you can specify all
the configuration classes using @Import annotation.
@SpringBootApplication
@Import({
AddressConfiguration.class, EmployeeConfiguration.class })
public
class Application {
}
Application.java
package com.sample.myApp.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Import; import com.sample.myApp.Configuration.AddressConfiguration; import com.sample.myApp.Configuration.EmployeeConfiguration; import com.sample.myApp.model.Address; import com.sample.myApp.model.Employee; @SpringBootApplication @Import({ AddressConfiguration.class, EmployeeConfiguration.class }) public class Application { public static void main(String args[]) { ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args); Employee employee = (Employee) applicationContext.getBean("getDefaultEmployee"); Address address = (Address) applicationContext.getBean("getDefaultAddress"); System.out.println(employee); System.out.println(address); applicationContext.close(); } }
Output
Employee [id=-1, firstName=NO_NAME, lastName=NO_NAME] Address [city=NOT_INITIALIZED, country=NOT_INITIALIZED, phoneNum=NOT_INITIALIZED, email=NOT_INITIALIZED]
No comments:
Post a Comment