gpt4 book ai didi

java - 在没有 RequestMapping 的类中 Autowiring

转载 作者:行者123 更新时间:2023-12-01 14:18:10 26 4
gpt4 key购买 nike

我正在处理三个不同的表。我正在使用 Hibernate 来查询这些表。我成功实现了 DAO 和服务层,但 Controller 包方面遇到了一些问题。这是我的代码,我的 Controller 包包含 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());
}

}

请求映射在第一个类中完成,该类的方法调用其他类中的另外 2 个方法。但似乎 Autowiring 仅在执行 RequestMapping 的类中起作用。

这是真的吗?

如果 Autowiring 不起作用,我如何使用不包含 RequestMapping 的类中的其他方法?

最佳答案

我解决了你的问题,我认为你不太清楚 @Controller , @RequestMapping 的目标。所以首先你需要知道,为什么我们使用@Controller?,它用于为你的请求提供业务逻辑。当用户点击请求时,您的 DispatcherServlet 会将您的请求中的 url 与所有定义的 Controller 的 RequestMapping 注释的值相匹配。并据此调用匹配的映射方法并由框架完成进一步的处理。现在来到@Autowire,它用于从xml配置加载bean类定义。所以@Autowire和@RequestMapping有不同的目标。所以这里说的是错误的

** Autowiring **仅在执行RequestMapping的类中起作用。

现在你的第二个问题,如何使用简单的类?据我所知,有两种方法可以实现这一目标,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 - 在没有 RequestMapping 的类中 Autowiring ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com