Coldfusion 带有ColdSpring的子应用程序不';我无法访问包方法
使用ColdSpring实例化对象时,我在创建子应用程序时遇到问题 在我的父应用程序中,我有一个ColdSpring配置文件,它可以毫无问题地实例化一组组件。其中一个是“Categories”(categorigateway)组件,该组件中注入了表的另一个组件(NestedSetTreeTable)。注入的组件包含一个由CategoryGateway组件调用的包方法“GetDatasource” 这在我的父应用程序中没有问题,但是当我尝试在我的子应用程序中实例化组件时,似乎CategoryGateway组件无法访问package方法 现在,我对ColdSpring非常陌生,也不熟悉从父应用程序创建子应用程序的概念,所以我不确定我是否做得正确 以下是我的设置: 父应用程序包含ColdSpring的映射版本及其自己的ColdSpring.xml。 coldspring.xml包含以下内容来实例化类别组件:Coldfusion 带有ColdSpring的子应用程序不';我无法访问包方法,coldfusion,cfc,subapplication,coldspring,Coldfusion,Cfc,Subapplication,Coldspring,使用ColdSpring实例化对象时,我在创建子应用程序时遇到问题 在我的父应用程序中,我有一个ColdSpring配置文件,它可以毫无问题地实例化一组组件。其中一个是“Categories”(categorigateway)组件,该组件中注入了表的另一个组件(NestedSetTreeTable)。注入的组件包含一个由CategoryGateway组件调用的包方法“GetDatasource” 这在我的父应用程序中没有问题,但是当我尝试在我的子应用程序中实例化组件时,似乎CategoryGat
<!-- 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>