Doubt about instance creation by using Spring framework ???
        Posted  
        
            by Arthur Ronald F D Garcia
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Arthur Ronald F D Garcia
        
        
        
        Published on 2010-06-11T20:28:45Z
        Indexed on 
            2010/06/11
            20:32 UTC
        
        
        Read the original article
        Hit count: 307
        
Here goes a command object which needs to be populated from a Spring form
public class Person {
    private String name;
    private Integer age;    
    /**
      * on-demand initialized
      */
    private Address address;
    // getter's and setter's
}
And Address
public class Address {
    private String street;
    // getter's and setter's
}
Now suppose the following MultiActionController
@Component
public class PersonController extends MultiActionController {
    @Autowired
    @Qualifier("personRepository")
    private Repository<Person, Integer> personRepository;
    /**
      * mapped To /person/add
      */
    public ModelAndView add(HttpServletRequest request, HttpServletResponse response, Person person) throws Exception {
        personRepository.add(person);
        return new ModelAndView("redirect:/home.htm");
    }
}
Because Address attribute of Person needs to be initialized on-demand, i need to override newCommandObject to create an instance of Person to initiaze address property. Otherwise, i will get NullPointerException
@Component
public class PersonController extends MultiActionController {
    /**
      * code as shown above
      */
    @Override
    public Object newCommandObject(Class clazz) thorws Exception {
        if(clazz.isAssignableFrom(Person.class)) {
            Person person = new Person();
            person.setAddress(new Address());
            return person;
        }
    }
}
Ok, Expert Spring MVC and Web Flow says
Options for alternate object creation include pulling an instance from a BeanFactory or using method injection to transparently return a new instance.
First option
- pulling an instance from a BeanFactory
can be written as
@Override
public Object newCommandObject(Class clazz) thorws Exception {
    /**
      * Will retrieve a prototype instance from ApplicationContext whose name matchs its clazz.getSimpleName()
      */
    getApplicationContext().getBean(clazz.getSimpleName());
}
But what does he want to say by using method injection to transparently return a new instance ??? Can you show how i implement what he said ???
ATT: I know this funcionality can be filled by a SimpleFormController instead of MultiActionController. But it is shown just as an example, nothing else
© Stack Overflow or respective owner