1

Spring Boot version:2.1.3.RELEASE,Spring Framework version:5.1.5.RELEASE.

Simple xml config like this:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="CustomerBean" class="io.github.ctlove0523.Customer">
        <property name="person">
            <bean class="io.github.ctlove0523.Person">
                <property name="name" value="stackoverflow" />
                <property name="address" value="address1" />
                <property name="age" value="15" />
            </bean>
        </property>
    </bean>
</beans>

how the java config would like?

TongChen
  • 1,414
  • 1
  • 11
  • 21

2 Answers2

1

Person.java

import org.springframework.beans.factory.annotation.Value;

public class Person {

    @Override
    public String toString() {
        return "Person [name=" + name + ", address=" + address + ", age=" + age + "]";
    }

    private String name;

    private String address;

    private Integer age;

    public String getName() {
        return name;
    }

    @Value("stackoverflow")
    public void setName(String name) {
        this.name = name;
    }

    @Value("address1")
    public void setAddress(String address) {
        this.address = address;
    }

    @Value("15")
    public void setAge(Integer age) {
        this.age = age;
    }

}

CustomerBean.java

import org.springframework.beans.factory.annotation.Autowired;

public class CustomerBean {


    Person person;

    public Person getPerson() {
        return person;
    }

    @Autowired
    public void setPerson(Person person) {
        this.person = person;
    }

}

App.java

    import org.springframework.context.annotation.AnnotationConfigApplicationContext;


public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        context.registerShutdownHook();

        CustomerBean customerBean = context.getBean(CustomerBean.class);

        System.out.println(customerBean.getPerson());
    }
}

AppConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
public class AppConfig {

    @Bean
    public CustomerBean customerBean() {
        return new CustomerBean();
    }

    @Bean
    public Person person() {
        return new Person();
    }
}

Output :

Person [name=stackoverflow, address=address1, age=15]

Edit: Is this what you are looking for ??

Create beans from inner class using spring

R.G
  • 6,436
  • 3
  • 19
  • 28
0

Check the Spring documentation on Java configuration : https://docs.spring.io/spring-javaconfig/docs/1.0.0.M4/reference/html/ch02s02.html

Depending on the code of your Person class, it would look something like this :

import io.github.ctlove0523.Customer;    

@Configuration
public class AppConfig {
    @Bean
    public Customer customerBean() {
        Customer myBean = new Customer();
        // constructor or setter methods for Person
        return myBean;
    }
}
jeroen_de_schutter
  • 1,843
  • 1
  • 18
  • 21