va ici un objet de commande qui doit être rempli d'une forme de printempsQuestion sur la création d'instance en utilisant Spring framework?
public class Person {
private String name;
private Integer age;
/**
* on-demand initialized
*/
private Address address;
// getter's and setter's
}
et adresse
public class Address {
private String street;
// getter's and setter's
}
Supposons maintenant les éléments suivants 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");
}
}
Comme attribut Adresse des besoins personne Pour être initialisé à la demande, je dois redéfinir newCommandObject pour créer une instance de la propriété Adresse de l'initiaze. Sinon, je vais obtenir 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 et Web flux dit
Options pour la création d'objet alternatif comprennent tirant une instance d'un BeanFactory ou par injection de méthode pour revenir en toute transparence un nouvelle instance
Première option
- tirant une instance d'un BeanFactory
peut être écrit comme
@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());
}
Mais qu'est-ce qu'il veut dire par par injection de méthode de manière transparente retourner une nouvelle inst an ??? Pouvez-vous montrer comment j'implémente ce qu'il a dit ???
ATT ATT: Je sais que cette fonctionnalité peut être remplie par un SimpleFormController au lieu de MultiActionController. Mais il est montré comme un exemple, rien d'autre
Y a-t-il une raison pour laquelle vous utilisez 'MultiActionController'? Il est obsolète au printemps 3, vous devriez vraiment utiliser '@ Controller 'à la place, c'est beaucoup plus facile. – skaffman
@skaffman Désolé, je n'utilise pas Spring 3.0 (Et je sais qu'il est obsolète au printemps 3.0) et je peux obtenir la même convention sur la configuration sans aucune annotation Spring 3.0 MVC. Je vous remercie! –
Vous pouvez également utiliser '@ Controller' dans Spring 2.5, vous n'avez pas besoin de la version 3.0. La liaison commande-objet est beaucoup plus simple à comprendre. Et votre code est déjà jonché d'annotations Spring MVC, je ne comprends pas que vous hésitiez à utiliser '@ Controller'. – skaffman