首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有ColdSpring的子应用程序无法访问包方法。

带有ColdSpring的子应用程序无法访问包方法。
EN

Stack Overflow用户
提问于 2013-04-07 18:13:18
回答 1查看 169关注 0票数 1

我很难用ColdSpring创建一个子应用程序来实例化我的对象。

在我的父应用程序中,我有一个ColdSpring配置文件,它实例化了一堆没有问题的组件。其中之一是“类别”(CategoryGateway)组件,它有另一个注入表(NestedSetTreeTable)的组件。注入的组件包含一个包方法“GetDatasource”,它由CategoryGateway组件调用。

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

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

这是我的装备:

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

代码语言:javascript
复制
<!-- 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> 

在我父级的Application.cfc中,我实例化了组件:

代码语言:javascript
复制
Application.com.categories = beanFactory.getBean('categories');

一切正常工作。现在,在我的子应用程序中,我有了另一个映射版本的ColdSpring和一个单独的coldspring.xml,以便我可以使用它来实例化特定于子应用程序的组件。我已经检查了正确的coldspring.xml是否正在运行。

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

代码语言:javascript
复制
<!-- 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> 

在引发错误的类别之前,还有其他几个核心组件是以这种方式加载的--因此该技术似乎有效,而且我可以访问我的核心组件,而无需在子Application.cfc中显式地实例化它们。但是,当它到达类别组件时,我会收到以下错误:

core.com.categories.categoryGateway init()期间Bean创建异常 组件core.com.categories.NestedSetTreeTable没有名称为getDatasource的函数:

如果我将getDatasource方法公诸于众的话,它似乎是有效的--但这似乎不太正确,因为它在父应用程序中是一样的。

添加到我的新事物列表中,OOP和继承.所以如果我搞错了,请告诉我。我尝试的是将核心功能(用户管理、错误处理、验证和许多我倾向于在每个应用程序中重用的东西)与特定的应用程序功能(例如,电子商务站点可能有一个cart组件不需要CMS )分离开来,这样在我开发一个新功能时,我可以决定将它放在核心中,并将其提供给我的所有应用程序,或者特定的应用程序。因此,在本例中,我试图在父Application.cfc中加载核心功能,并使子函数能够自动使用它。理想情况下,子程序不应该指定Coldspring.xml中的核心功能,但是我还没有找到一种同时运行父函数和子函数的方法。

任何帮助,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-04-07 21:10:31

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

你搞错了。如果GetDatasourceNestedSetTreeTable是私有的,那么CategoryGateway就无法访问它。完全停止。

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

CategoryGatewayNestedSetTreeTable作为参数是不相关的:这并不会赋予CateoryGatewayNestedSetTreeTable's方法的任何特殊访问权限。

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

因此,在这种情况下--我不怀疑你看到的是环境之间的不同情况--你在你的问题中遗漏了一些关键信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15865973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档