Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于使用Spring框架创建实例的问题?_Java_Spring_Spring Mvc_Initialization_Factory Pattern - Fatal编程技术网

Java 关于使用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

下面是一个需要从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 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注释无法获得相同的行为???