Java 关于使用Spring框架创建实例的问题?
下面是一个需要从Spring窗体填充的命令对象Java 关于使用Spring框架创建实例的问题?,java,spring,spring-mvc,initialization,factory-pattern,Java,Spring,Spring Mvc,Initialization,Factory Pattern,下面是一个需要从Spring窗体填充的命令对象 public class Person { private String name; private Integer age; /** * on-demand initialized */ private Address address; // getter's and setter's } 地址 public class Address { private
public class Person {
private String name;
private Integer age;
/**
* on-demand initialized
*/
private Address address;
// getter's and setter's
}
地址
public class Address {
private String street;
// getter's and setter's
}
现在假设下面的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");
}
}
专家SpringMVC和WebFlow说
替代对象创建的选项包括从BeanFactory中提取实例或使用方法注入透明地返回新实例
第一选择
- 从BeanFactory中提取实例
@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());
}
但是,通过使用方法注入透明地返回一个新实例,他想说什么呢???你能告诉我怎么执行他说的吗
ATT:我知道这个功能可以由SimpleFormController而不是MultiActionController来填充。但是它只是作为一个例子显示的,没有别的我很确定他指的是使用
查找方法
系统,如中所述
唯一的缺点是,
需要一个无参数的方法,而不是MultiActionController的对象(类)
方法
这可以通过以下方法解决:
public abstract class PersonController extends MultiActionController {
/**
* code as shown above
*/
@Override
public Object newCommandObject(Class clazz) thorws Exception {
if(clazz.isAssignableFrom(Person.class)) {
return newPerson();
}
}
public abstract Person newPerson();
}
在上下文文件中:
<bean id="personController" class="org.yourapp.PersonController">
<lookup-method name="newPerson" bean="personPrototype"/>
</bean>
不利的一面是,使用这种方法时,您需要通过xml配置控制器bean,这是不可能的(当然是在<3)使用注释来实现的。我很确定他指的是使用查找方法
系统,如中所述
唯一的缺点是,
需要一个无参数的方法,而不是MultiActionController的对象(类)
方法
这可以通过以下方法解决:
public abstract class PersonController extends MultiActionController {
/**
* code as shown above
*/
@Override
public Object newCommandObject(Class clazz) thorws Exception {
if(clazz.isAssignableFrom(Person.class)) {
return newPerson();
}
}
public abstract Person newPerson();
}
在上下文文件中:
<bean id="personController" class="org.yourapp.PersonController">
<lookup-method name="newPerson" bean="personPrototype"/>
</bean>
不利的一面是,使用这种方法时,您会被困在通过xml配置控制器bean的过程中,这是不可能的(当然是在<3)使用注释来实现这一点。您使用MultiActionController
有什么原因吗?它在Spring 3中被弃用了,你真的应该改用@Controller
,这要简单得多。@skaffman抱歉,我不使用Spring 3.0(我知道它在Spring 3.0中被弃用了),而且我可以在没有Spring 3.0 MVC注释的情况下获得相同的配置约定。非常感谢。您也可以在Spring2.5中使用@Controller
,您不需要3.0。命令对象绑定更容易理解。而且您的代码中已经充斥着Spring MVC注释,我不理解您不愿意使用@Controller
。您使用MultiActionController
有什么原因吗?它在Spring 3中被弃用了,你真的应该改用@Controller
,这要简单得多。@skaffman抱歉,我不使用Spring 3.0(我知道它在Spring 3.0中被弃用了),而且我可以在没有Spring 3.0 MVC注释的情况下获得相同的配置约定。非常感谢。您也可以在Spring2.5中使用@Controller
,您不需要3.0。命令对象绑定更容易理解。而且您的代码中已经充斥着Spring MVC注释,我不理解您不愿意使用@Controller
。谢谢。我认为你是对的。使用Spring注释无法获得相同的行为???谢谢。我认为你是对的。使用Spring注释无法获得相同的行为???