问题标签 [objectfactory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
248 浏览

c++ - C++ 阻止用户创建对象实例

我必须为某些类型的对象创建简单的单例对象工厂。问题是我找不到阻止用户通过构造函数创建对象实例的聪明方法。我知道我可以将构造函数移动到私有/受保护部分,但是当构造函数是私有/受保护时,工厂现在将如何创建新对象?让工厂成为每个班级的朋友并不是很聪明,因为我需要在每个标题中预先声明工厂并编写额外的“朋友工厂”;在每个班级。如何正确执行此操作?

0 投票
0 回答
384 浏览

mapping - 如何在 ORIKA 中映射类型对象的属性

我有一个 OrderEntryData 类,在里面我有一个属性,它是一个 configurationInfoData 列表(List< ConfigurationInfoData >),在这个 ConfigurationInfoData 里面有一个 Object 类型的属性(Object 值)。该值有时会是日期、字符串或 customClass。

我正在将 Orika 用于 webServices,并且正在尝试解决 OrderEntryDTO 类。

文件:customcommerceWebServices-beans.xml

我正在使用作为 AddressData 实例的对象进行测试。导致地址对象的映射/转换运行良好 AddressData -> AddressDTO

问题是(我认为)Orika 无法识别对象的实例(对象源)或目标类(对象目标)。在响应中,我应该有一个 AddressWsDTO 但我得到:

“de.hybris.platform.cmssmarteditwebservices.dto.AbstractPageWsDTO@54330c75”

我试图实现一个转换器,因为我在想也许 Orika 不知道如何将对象转换为 AddressData(不工作)。

0 投票
0 回答
31 浏览

c++ - 将代码编译为库时未在工厂中注册的对象,但可以独立运行

我们正在尝试将我们的代码转换为库,以允许与其他代码进行一些接口。在代码中,我们使用了很多依赖于单例模式的对象工厂,其中对象通过宏声明,实现如下。

我们的问题是,当我们将整个代码编译为库时,对象不再在工厂中注册,并且无法在执行时创建。你有什么建议吗?值得注意的是,应该做一些事情 extern 吗?我必须承认我已经达到了我的极限......

非常感谢 !

马克

0 投票
1 回答
34 浏览

javascript - OOP Javascript:内置与用户定义的构造函数

我试图理解 javascript 中的对象创建,并且我知道我们有几种方法可以完成它:Object Literal、Factory 和 Constructor。

我实际上正在使用控制台,但在 jsfiddle 我通过 doc write 输出

问题是 obj 文字和工厂与我们明确使用 obj 构造函数类型的方式相比,我们没有通过构造函数。到目前为止一切顺利,但是当我在控制台中检查 obj 文字和工厂时,它们确实有一个构造函数 [本机代码]

这是我在控制台中得到的:

那么 obj_lit 和 obj_fac 的这 2 个本地构造函数到底是什么?

并且 js 引擎实际上是通过内部的“新”关键字创建 obj_lit 和 obj_fac 吗?

当我们不想采用通过构造函数创建对象的经典方式时,它不会破坏使用文字和工厂的整个概念吗?

0 投票
0 回答
46 浏览

python - How to use a object factory with contextlib

I need to write code that deals with different hardware setups. A prori I don't know which hardware is connected to my system. So I use a object factory that reads some identifiers from the hardware and returns a specialized object. I would like to combine this approach with contextlib but did find out that the object still exists outside the with block. In my case this is a problem as I need to close the connection to my device.

A minimal working example for my problem:

This yields

How can I modify this code such that the final animal.speak() results in a error? I know that I can use del animal to release animal but there must be a more elegant way.

0 投票
0 回答
129 浏览

java - Android:找不到 javax.naming.spi.ObjectFactory 的类文件 - 当我尝试将 Hessian 集成到 Android 中时

当我尝试将 Hessian 集成到 Andorid 时,我收到以下错误消息:

错误:无法访问找不到 javax.naming.spi.ObjectFactory 的 ObjectFactory 类文件

这是代码:

build.gradle 文件:

有没有人有办法解决吗?我犯错了吗?非常感谢。

0 投票
1 回答
2063 浏览

java - 指定一个 `DataSource` 工厂而不是 Tomcat 的默认值

tl;博士

如何告诉 Tomcat 9 使用特定于 Postgres 的 对象工厂来生成DataSource对象以响应JNDI查询?

细节

通过定义一个与我的上下文名称相同的 XML 文件,我可以轻松地从Apache TomcatDataSource 9 获取对象。例如,对于一个名为 的网络应用程序,我创建了这个文件:clepsydra

我将该文件放在我的 Tomcat “基本”文件夹中,在conf文件夹中,在我使用引擎名称Catalina和主机名创建的文件夹中localhost。Tomcat 将设置输入资源工厂以返回DataSource. 我可以通过 JNDI 访问该实例:

我确实意识到,postgres在那个查找字符串中可能是特定应用程序更具体的东西。但是,让我们postgres进行相同的演示。

我要org.postgresql.ds.PGSimpleDataSource,不要org.apache.tomcat.dbcp.dbcp2.BasicDataSource

此设置使用Tomcat 自己的 JDBC DataSource objects 资源工厂。返回DataSource类的基础类是org.apache.tomcat.dbcp.dbcp2.BasicDataSource. 不幸的是,我不想要DataSource那个班级。我想要一个由The PostgreSQL Global Development Group的JDBC 驱动程序DataSource提供的类:. org.postgresql.ds.PGSimpleDataSource

通过阅读 Tomcat 文档页面、JNDI Resources How-ToJNDI Datasource How-To,我开始意识到 Tomcat 允许我们为这些DataSource对象使用替代工厂来代替与 Tomcat 捆绑的默认工厂实现。听起来像我需要的。

PGObjectFactory

我发现 Postgres JDBC 驱动程序已经捆绑了这样的实现:

顺便说一句,OSGi 应用程序的驱动程序中内置了一个类似的工厂,PGDataSourceFactory. 我认为这对我来说对 Tomcat 没有用。

因此,PGObjectFactory该类实现了javax.naming.spi.ObjectFactoryJNDI 所需的接口。

SPI

我猜spi在那个包名中的意思是对象工厂通过Java Service Provider Interface (SPI)加载。

SPI 映射文件位置及其内容的屏幕截图

因此,我认为需要一个 SPI 映射文件,如Oracle 教程Vaadin 文档中所述。META-INF在我的 Vaadin 文件夹中添加了一个文件resources夹,并在其中创建了一个services进一步嵌套的文件夹。所以在/resources/META-INF/services我创建了一个javax.naming.spi.ObjectFactory包含单行文本的文件,我想要的对象工厂的名称:org.postgresql.ds.common.PGObjectFactory. 我什至检查了 Postgres JDBC 驱动程序,以物理上验证此类的存在和完全限定名称。

问题

➥ 我的问题是:我如何告诉 Tomcat 使用PGObjectFactory而不是它的默认对象工厂来生成我的DataSource对象以生成与我的 Postgres 数据库的连接?

factory<Resource>元素上的属性

我曾希望它就像在上面看到的我的元素中添加一个factory属性 ( )一样简单。我从 Tomcat 页面The Context Container中得到了这个想法。该页面非常混乱,因为它专注于全球资源,但我不需要或不想在全球范围内定义它。我只需要这个用于我的一个网络应用程序。factory="org.postgresql.ds.common.PGObjectFactory"<Resource>DataSourceDataSource

添加该factory属性:

…失败,我的DataSource对象为空。

空值

删除该factory="org.postgresql.ds.common.PGObjectFactory"属性可解决异常。但是后来我又回到了 TomcatBasicDataSource而不是 Postgres PGSimpleDataSource。因此我的问题在这里。

我知道我的ContextXML 已成功加载,因为我可以访问Environment该条目的值。

第二次实验

几天后,我从顶部尝试了这个。

我创建了一个名为“datasource-object-factory”的新“Plain Java Servlet”风格的 Vaadin 14.0.9 项目。

这是我的整个 Vaadin Web 应用程序代码。下半部分是 JNDI 查找。

为简单起见,我没有指定 Tomcat“基本”文件夹,而是使用默认值。我没有从 IntelliJ 运行,而是将我的 Web 应用程序的 WAR 文件手动移动到该webapps文件夹​​中。

我下载了 Tomcat 的新版本,版本 9.0.27。我将 Postgres JDBC jar 拖到/lib文件夹中。我使用 BatChmod 应用程序来设置 Tomcat 文件夹的权限。

对于conf文件夹,我创建了Catalina&localhost文件夹。在那里,我创建了一个文件,其名称datasource-object-factory.xml与上面看到的内容相同。

我将我的网络应用程序的datasource-object-factory.war文件复制到webappsTomcat 中。最后,我运行 Tomcat/bin/startup.sh并观察 WAR 文件分解到一个文件夹中。

使用我元素factory="org.postgresql.ds.common.PGObjectFactory"上的属性,结果是.ResourceDataSourcenull

与我的第一个实验一样,我可以访问 的值<Environment>,因此我知道我的上下文名称 XML 文件正在被找到并通过 JNDI 成功处理。

以下是 Google Drive 上的日志:

0 投票
1 回答
47 浏览

c++ - 注册对对象工厂的调用会导致段错误

我正在尝试用 C++ 构建一个简单的对象工厂。到目前为止,我有这个代码:

工厂:

物体:

segv的回溯:

我遇到的问题是我无法理解为什么会发生 segv,因为s_methods映射应该在编译时初始化为 0,并且s_registered应该在程序开始时初始化。