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
Java grails中的动态组件扫描_Java_Spring_Grails - Fatal编程技术网

Java grails中的动态组件扫描

Java grails中的动态组件扫描,java,spring,grails,Java,Spring,Grails,我有一个关于grails的玩具项目,其主要思想是在运行时将用户组件加载到应用程序中。 根据我的想法,用户在我的web应用程序中编写自己的bean(控制器和服务)作为DSL bean集,按下按钮,该文件中的bean将加载到应用程序上下文中。目前,我可以使用AC加载和连接这些bean,但grails不将它们视为控制器。我假设有两种策略可以在grails应用程序中找到控制器:grails扫描位于某个“magic”文件夹中的bean,连接它们,并假设该bean的所有方法都是requestmapping。

我有一个关于grails的玩具项目,其主要思想是在运行时将用户组件加载到应用程序中。 根据我的想法,用户在我的web应用程序中编写自己的bean(控制器和服务)作为DSL bean集,按下按钮,该文件中的bean将加载到应用程序上下文中。目前,我可以使用AC加载和连接这些bean,但grails不将它们视为控制器。我假设有两种策略可以在grails应用程序中找到控制器:grails扫描位于某个“magic”文件夹中的bean,连接它们,并假设该bean的所有方法都是requestmapping。查找控制器的第二种方法是使用@Controller和@RequestMapping对它们进行注释。这就是我不知道该怎么做的。 当我用@Controller注释这些DSL bean并连接它们时,它们确实会出现在控制器列表中,以这种方式计算

package ealo;

import java.util.Map;
import java.util.Map.Entry;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

public class ControllerLister {

    @Autowired
    private RequestMappingHandlerMapping requestMappingHandlerMapping;

    //@PostConstruct
    public void init1() {
        Map<RequestMappingInfo, HandlerMethod> handlerMethods
                 = this.requestMappingHandlerMapping.getHandlerMethods();

        //System.out.println("111 "+handlerMethods);
        for (Entry<RequestMappingInfo, HandlerMethod> item : handlerMethods.entrySet()) {
            RequestMappingInfo mapping = item.getKey();
            HandlerMethod method = item.getValue();

            // System.out.println("111");
            for (String urlPattern : mapping.getPatternsCondition().getPatterns()) {
                System.out.println(
                         method.getBeanType().getName() + "#" + method.getMethod().getName()
                         + " <-- " + urlPattern);

                 if (urlPattern.equals("some specific url")) {
                     //add to list of matching METHODS
                 }
             }
         }
     }

 }
包ealo;
导入java.util.Map;
导入java.util.Map.Entry;
导入javax.annotation.PostConstruct;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.web.method.HandlerMethod;
导入org.springframework.web.servlet.mvc.method.RequestMappingInfo;
导入org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
公共类控制器寄存器{
@自动连线
私有RequestMappingHandlerMappingRequestMappingHandlerMapping;
//@施工后
public void init1(){
地图处理方法
=this.requestMappingHandlerMapping.getHandlerMethods();
//System.out.println(“111”+handlerMethods);
for(条目项:handlerMethods.entrySet()){
RequestMappingInfo-mapping=item.getKey();
HandlerMethod=item.getValue();
//系统输出打印项次(“111”);
对于(字符串urlPattern:mapping.getPatternsCondition().getPatterns()){
System.out.println(
方法.getBeanType().getName()+“#”+方法.getMethod().getName()

+“我编写了一个插件,可以让您在运行时注册控制器,并从各种来源组合控制器。有关更多信息,请参阅,并查看其使用示例。好的。我发现我可以使用grailsApplication.addArtifact()完成所需的所有操作。”.据我所知,GUI中的文档本身就是关于人工制品类型的,甚至连接了它。现在我遇到了另一个问题:ERROR filter.UrlMappingsFilter-匹配URL映射时出错[/()/()?/()?(.())?]:null似乎阻止了所有的映射。我做错了什么?你做错了什么是在考虑涉及到多少:)看看插件做了什么。方法
createDynamicController()插件中的类的
DynamicControllerManager
将类定义构建为字符串,使用grails应用程序的类加载器对其进行解析,将其作为工件添加到grails应用程序中,对其进行初始化,并将其类注册为bean定义。这足以创建控制器吗?:)a可以看到所有其他例程生成混入逻辑。