package com.example.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class App { public static void main(String[] args) { @SuppressWarnings("resource") ApplicationContext ctx = new AnnotationConfigApplicationContext(App.class); MathsUser mathsUser = ctx.getBean(MathsUser.class); mathsUser.doTask(); } @Bean public Maths maths() { Maths maths = new Maths(); maths.setB(100); return maths; } @Bean public MathsUser mathsUser() { MathsUser mathsUser = new MathsUser(); /* * What would the maths() return? Would it be the Spring managed bean or what * would be returned when the maths() method is directly invoked? * * @Bean can be used with classes annotated with @Component tool. * * In a class annotated with @Configuration, maths() return the Spring managed bean. * * In a class annotated with @Component, what is returned by maths() is not the * Spring managed bean, but what would be returned when the maths() method is directly invoked. * * For more details, look at the 'Full @Configuration vs “lite” @Bean mode?' description * found in the 'Core Technologies' section of the Spring Framework Reference documentation. */ mathsUser.setMaths(maths()); return mathsUser; } }