我正在处理三个不同的表。我正在使用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/

10-13 07:54