我正在处理三个不同的表。我正在使用Hibernate查询这些表。我已经成功实现了DAO和服务层,但是控制器包几乎没有问题。这是我的代码,我的控制器程序包包含3个类,每个类应处理一个表(我之前说过有3个表)。
@Controller
public class Ods_Gis_Actel_Controller {
Param_Gis_Actel_Controller Param = new Param_Gis_Actel_Controller();
Tbl_Dim_Actel_Controller Dim = new Tbl_Dim_Actel_Controller();
@Autowired
Ods_Gis_Actel_metier service;
@RequestMapping(value="/index")
public String pageIndex(Model model)
{
addOdsTable(model);
Param.addParamTable(model);
Dim.addDimTable(model);
return "Affichage";
}
public void addOdsTable(Model model)
{
model.addAttribute("listeOds",service.getAll());
}
}
@Controller
public class Param_Gis_Actel_Controller {
@Autowired
Param_Gis_Actel_metier service;
public void addParamTable(Model model)
{
model.addAttribute("listeParam",service.getAll());
}
}
@Controller
public class Tbl_Dim_Actel_Controller {
@Autowired
Tbl_Dim_Actel_metier service;
public void addDimTable(Model model)
{
model.addAttribute("listeDim",service.getAll());
}
}
请求映射在第一个类中完成,该类的方法从其他类中调用另外两个方法。但是似乎自动装配仅在执行RequestMapping的类中有效。
这是真的?
如果自动装配对它们不起作用,我如何使用不包含RequestMapping的类中的其他方法?
最佳答案
我解决了您的问题,我认为您不太了解@ Controller,@ RequestMapping的目标。因此,首先您需要知道为什么我们使用@Controller ?,这用于为您的请求提供业务逻辑。当从user发出请求时,您的DispatcherServlet将请求中的url与所有已定义控制器的RequestMapping注释的值进行匹配。并且据此,调用了匹配的映射方法,并由框架进一步进行。现在来看@Autowire,它用于从xml配置中加载bean类定义。因此@Autowire和@RequestMapping具有不同的目标。所以在这里说**autowiring** works only in the class where the RequestMapping is performed.
现在是第二个问题,如何使用简单的类?据我所知,有两种方法可以实现这一目标,
1)如您在代码中所做的那样,在您的类中创建该类的对象
2)使用工厂方法创建该类的实例。
对于第二点,您必须首先按照以下格式在配置文件中定义您的类
<bean id="paramGis" class="<whatever_package_detail>.Param_Gis_Actel_Controller" factory-method="createInstance"/>
在这里,您必须注意此方法应该是静态的。
你的班级看起来像
@Service
public class Param_Gis_Actel_Controller {
private static Param_Gis_Actel_Controller paramGis;
public static Param_Gis_Actel_Controller createInstance(){
if(paramGis==null){
return new Param_Gis_Actel_Controller();
}
return paramGis;
}
public void addParamTable(Model model)
{
model.addAttribute("listeParam",service.getAll());
}
}
如果您仍然遇到问题,请告诉我。
关于java - 在类中 Autowiring 而无需RequestMapping,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17919817/