Coldfusion 带有ColdSpring的子应用程序不';我无法访问包方法

Coldfusion 带有ColdSpring的子应用程序不';我无法访问包方法,coldfusion,cfc,subapplication,coldspring,Coldfusion,Cfc,Subapplication,Coldspring,使用ColdSpring实例化对象时,我在创建子应用程序时遇到问题 在我的父应用程序中,我有一个ColdSpring配置文件,它可以毫无问题地实例化一组组件。其中一个是“Categories”(categorigateway)组件,该组件中注入了表的另一个组件(NestedSetTreeTable)。注入的组件包含一个由CategoryGateway组件调用的包方法“GetDatasource” 这在我的父应用程序中没有问题,但是当我尝试在我的子应用程序中实例化组件时,似乎CategoryGat

使用ColdSpring实例化对象时,我在创建子应用程序时遇到问题

在我的父应用程序中,我有一个ColdSpring配置文件,它可以毫无问题地实例化一组组件。其中一个是“Categories”(categorigateway)组件,该组件中注入了表的另一个组件(NestedSetTreeTable)。注入的组件包含一个由CategoryGateway组件调用的包方法“GetDatasource”

这在我的父应用程序中没有问题,但是当我尝试在我的子应用程序中实例化组件时,似乎CategoryGateway组件无法访问package方法

现在,我对ColdSpring非常陌生,也不熟悉从父应用程序创建子应用程序的概念,所以我不确定我是否做得正确

以下是我的设置:

父应用程序包含ColdSpring的映射版本及其自己的ColdSpring.xml。 coldspring.xml包含以下内容来实例化类别组件:

<!-- Categories CFC -->
<bean id="categories" parent="config" class="com.categories.categoryGateway">
    <constructor-arg name="sCategoriesTable">
        <value>${sCategoriesTable}</value>
    </constructor-arg>
    <constructor-arg name="sNSTTable">
        <value>${sNSTTable}</value>
    </constructor-arg>      
    <constructor-arg name="NST">
        <ref bean="categoriesNST" />
    </constructor-arg>      
</bean>

<!-- Categories NST Table CFC -->
<bean id="categoriesNST" parent="config" class="com.categories.NestedSetTreeTable">
    <constructor-arg name="datasourceName">
        <value>${sDSN}</value>
    </constructor-arg>
    <constructor-arg name="table">
        <value>${sNSTTable}</value>
    </constructor-arg>
</bean> 
一切正常。 现在,在我的子应用程序中,我有了另一个映射版本的ColdSpring和一个单独的ColdSpring.xml,这样我就可以使用它来实例化特定于子应用程序的组件。 我已检查是否正在运行正确的coldspring.xml

我不是在我的子应用程序的Application.cfc中实例化基本组件,而是调用Super.onApplicationStart来运行父应用程序的方法。父应用程序包含实例化代码,但是它使用子应用程序的Coldspring.xml来查找组件-因此我创建了到父应用程序的映射,并相应地调整了子应用程序的Coldspring.xml-因此如下所示:

<!-- Categories CFC -->
<bean id="categories" parent="config" class="core.com.categories.categoryGateway">
    <constructor-arg name="sCategoriesTable">
        <value>${sCategoriesTable}</value>
    </constructor-arg>
    <constructor-arg name="sNSTTable">
        <value>${sNSTTable}</value>
    </constructor-arg>      
    <constructor-arg name="NST">
        <ref bean="categoriesNST" />
    </constructor-arg>      
</bean>

<!-- Categories NST Table CFC -->
<bean id="categoriesNST" parent="config" class="core.com.categories.NestedSetTreeTable">
    <constructor-arg name="datasourceName">
        <value>${sDSN}</value>
    </constructor-arg>
    <constructor-arg name="table">
        <value>${sNSTTable}</value>
    </constructor-arg>
</bean> 

${sCategoriesTable}
${sNSTTable}
${sDSN}
${sNSTTable}
在categories one抛出错误之前,还有其他几个核心组件是以这种方式加载的——因此,该技术似乎正在发挥作用,我可以访问我的核心组件,而无需在child的Application.cfc中显式实例化它们。 但是,当它到达categories组件时,我收到以下错误:

core.com.categories.categorigateway的init()期间出现Bean创建异常

组件[core.com.categories.NestedSetTreeTable]没有名为[getDatasource]的函数:

如果我将getDatasource方法公开,它似乎可以工作——但是这似乎不正确,因为它在父应用程序中工作

添加到我的新事物列表中,OOP和继承。。。因此,如果我完全走错了方向,请让我知道。 我尝试的是将核心功能(用户管理、错误处理、验证和我倾向于在每个应用程序中重用的一堆东西)与特定应用程序功能(例如,电子商务网站可能有CMS不需要的购物车组件)分离开来,以便在我开发新功能时,我可以决定将它放在核心,并使其可用于我的所有应用程序,或在特定的应用程序。 因此,在本例中,我尝试在父级的Application.cfc中加载核心功能,并让子级自动能够使用它。理想情况下,孩子不必在Coldspring.xml中指定核心功能,但我还没有找到同时运行父母和孩子的核心功能的方法

任何帮助,非常感谢

注入的组件包含一个私有方法“GetDatasource” 由CategoryGateway组件调用

你错了。如果
GetDatasource
NestedSetTreeTable
的私有,则
CategoryGateway
无法访问它。句号

只能从组件本身内部调用私有方法,或者在
ComponentChild
扩展
ComponentParent
的情况下,
ComponentChild
可以从
ComponentParent
调用私有方法

CategoryGateway
NestedSetTreeTable
作为参数是不相关的:它不授予
CategoryGateway
NestedSetTreeTable的
方法的任何特殊访问权限

Coldspring在这里也无关紧要:它只是一种整理对象实例化的机制,它不授予任何特殊的权限,也不破坏方法访问的规则

因此,在这种情况下——我毫不怀疑您看到了不同环境之间的不同情况——您忽略了问题中的一些关键信息

注入的组件包含一个私有方法“GetDatasource” 由CategoryGateway组件调用

你错了。如果
GetDatasource
NestedSetTreeTable
的私有,则
CategoryGateway
无法访问它。句号

只能从组件本身内部调用私有方法,或者在
ComponentChild
扩展
ComponentParent
的情况下,
ComponentChild
可以从
ComponentParent
调用私有方法

CategoryGateway
NestedSetTreeTable
作为参数是不相关的:它不授予
CategoryGateway
NestedSetTreeTable的
方法的任何特殊访问权限

Coldspring在这里也无关紧要:它只是一种整理对象实例化的机制,它不授予任何特殊的权限,也不破坏方法访问的规则


因此,在这种情况下——我毫不怀疑您看到的是环境之间的不同情况——您忽略了问题中的一些关键信息。

我建议您将其分为两个问题(因为这是两个问题)。1)
getDatasource()
方法的问题;2) 如何使用Co配置您的父/子应用程序
<!-- Categories CFC -->
<bean id="categories" parent="config" class="core.com.categories.categoryGateway">
    <constructor-arg name="sCategoriesTable">
        <value>${sCategoriesTable}</value>
    </constructor-arg>
    <constructor-arg name="sNSTTable">
        <value>${sNSTTable}</value>
    </constructor-arg>      
    <constructor-arg name="NST">
        <ref bean="categoriesNST" />
    </constructor-arg>      
</bean>

<!-- Categories NST Table CFC -->
<bean id="categoriesNST" parent="config" class="core.com.categories.NestedSetTreeTable">
    <constructor-arg name="datasourceName">
        <value>${sDSN}</value>
    </constructor-arg>
    <constructor-arg name="table">
        <value>${sNSTTable}</value>
    </constructor-arg>
</bean>