小编use*_*850的帖子

Guice渴望/懒惰的单身实例化

我有一些麻烦,了解Guice的单例实例化是如何工作的.我已经阅读了可用的文档(此处为http://code.google.com/p/google-guice/wiki/Scopes),但我仍然无法弄清楚一些事情:

1)我已经将Guice与Tomcat集成在一起,我在ServletModule中设置了一些绑定:

bind(MyServlet.class).asEagerSingleton();
serve("myUrl").with(MyServlet.class);
serve("myOtherUrl").with(MyOtherServlet.class);
Run Code Online (Sandbox Code Playgroud)

(其中MyOtherServlet类上面有一个@Singleton注释)我的意图是有两个servlet,其中一个是急切实例化的,而另一个则不是.然而,似乎"serve ... with ..."行自动实例化servlet对象,即使该类未被绑定为急切的单例.我上面提到的链接提到了在Stage.Development和Stage.Production下运行的Guice之间的区别 - 但是即使我明确地使用了Stage.Development(无论如何都是默认的),这仍然会发生.有什么方法可以避免这种情况吗?

2)(继续1)尝试确保MyServlet首先被实例化,即使所有servlet现在急切地实例化,我在创建Injector时修改了模块(和绑定语句)的顺序,以便首先显示MyServlet的绑定.但是,我发现它仍然比其他一些绑定(非servlet类)实例化,其形式如下:

bind(MyInterface.class).to(MyClass.class).asEagerSingleton()
Run Code Online (Sandbox Code Playgroud)

即使这些其他绑定稍后出现在modules/bindings顺序中.我调查了一下,发现Guice只是实例化了那些受"bind ... to ... asEagerSingleton()"形式约束的热切单体,然后再进行"bind ... asEagerSingleton()",所以我通过修改行来解决它:bind(MyServlet.class).asEagerSingleton(); into:bind(MyServletDummyInterface.class).to(MyServlet.class).asEagerSingleton()

这实际上有效.不过,我宁愿避免使用虚拟接口来解决这个问题,所以我想知道是否有人有更好的解决方案..?

3)我有两个Guice模块 - 一个ServletModule和一个AbstractModule.ServletModule configureServlets()中包含以下绑定:

serve("aUrl").with(SomeServlet.class);
Run Code Online (Sandbox Code Playgroud)

AbstractModule的configure()具有以下绑定:

bind(SomeImpl.class).asEagerSingleton();
bind(SomeInterface.class).to(SomeImpl.class).in(Singleton.class);
Run Code Online (Sandbox Code Playgroud)

此外,SomeServlet类具有SomeInterface类型的注入字段,并且在类的顶部具有@Singleton注释.

现在,可以预期在创建注入器时,SomeImpl类将被实例化,并且相同的实例将被注入SomeServlet实例.如前所述,带有"serve ... with ..."语句的servlet似乎也得到了热切的实例化,但无论哪种方式,都应该只有一个SomeImpl对象被实例化.但由于某种原因,我在执行此操作时实例化了两个SomeImpl对象.为了解决这个问题,我在configure()中混合了两行,而不是上面的代码,我有以下几行:

bind(SomeImpl.class).in(Singleton.class)
bind(SomeInterface.class).to(SomeImpl.class).asEagerSingleton();
Run Code Online (Sandbox Code Playgroud)

然后它工作正常,我只有一个实例化SomeImpl的实例.我真的不明白为什么开关应该重要 - 我可以看到后一种方式是如何"更好",但我希望两者都能正常工作,所以我只是想知道我是否在这里弄错了.. ?



抱歉长度,
谢谢你的帮助!

java singleton eager guice

10
推荐指数
1
解决办法
3万
查看次数

C#代码契约 - 避免检查空引用的参数

我今天读到了C#4.0代码合同.似乎验证方法的参数不是null的常见做法如下:

Contract.Requires(p != null);
Run Code Online (Sandbox Code Playgroud)

然而,对于我来说,我必须为我的代码中的每个接口方法的每个参数执行此操作,这似乎是不合理的.在绝大多数情况下,参数预计不为空.我希望有某种机制允许定义一些特定的参数被"允许"为空(类似于Java中的"@Nullable"注释),并且Contracts框架将自动确保其余的不是空值.

除了节省很多时间在这个"样板检查"(以及许多"合同类",除了非空参数之外,根本没有任何条件需要验证),它还会使合同代码更清洁而且更"以逻辑为导向".

我的问题是,有没有办法做到这一点,如果没有,哪里没有,或者可能为什么我的方法在这里错了?

c# code-contracts c#-4.0

8
推荐指数
1
解决办法
591
查看次数

如何使用python二进制发行版传送数据文件?

我想为我的Python包创建一个bdist.该软件包包含一个LICENSE文件,该文件作为分发的一部分是必需的.

LICENSE在我的文件中添加了对该文件的引用MANIFEST.IN,实际上在为我的包创建了一个sdist后,该LICENSE文件就在那里.

然而,似乎当我为我的package(python setup.py bdist_wheel)构建一个Python轮时,该LICENSE文件无处可见.

我熟悉setup.py的概念package_datadata_files- 但它们似乎与我的用例无关: package_data要求LICENSE文件在Python包中,但我需要将此文件放在顶级文件夹中该项目不是Python包. data_files要求我在安装后映射文件的目标目录,但它不是相对于项目的包,而是相对于python安装 - 我发现它非常奇怪,因为它可能取决于操作系统/平台,是否virtualenv使用等

据我所知,在一天结束时,软件包安装在site-packages安装后的"顶级文件"下面没有空间.尽管如此,我正在寻找一种方法将LICENSE文件作为我的一部分wheel,即使它在安装过程中没有被复制到任何特定位置.

python packaging data-files python-wheel

7
推荐指数
1
解决办法
504
查看次数

java泛型 - 参数不能应用于方法


我似乎无法弄清楚为什么我试图制作的方法调用不起作用.
在问这个问题之前我已经看了很多,虽然有很多关于类似问题的线程,但我找不到一个非常适合我的问题.
我有以下代码:

(在文件Processor.java :)

public interface Processor
{
    Runner<? extends Processor> getRunner();
}
Run Code Online (Sandbox Code Playgroud)

(在文件Runner.java :)

public interface Runner<P extends Processor>
{
    int runProcessors(Collection<P> processors);
}
Run Code Online (Sandbox Code Playgroud)

(在某些其他文件中,在某些方法中:)

Collection<? extends Processor> processorsCollection = ...;
Runner<? extends Processor> runner = ...;
runner.runProcessors(processorsCollection);
Run Code Online (Sandbox Code Playgroud)


IntelliJ将最后一行标记为错误:
"Runner中的RunProcessors(java.util.Collection>)无法应用于(java.util.Collection>)".
我无法弄清楚我做了什么是错的,特别是因为错误信息不太清楚..有

什么建议吗?

谢谢.

java generics

4
推荐指数
1
解决办法
2141
查看次数

Javascript setInterval - 率还是延迟?

Javascript setInterval方法是否等待(至少)特定代码的两次执行之间的指定时间间隔,还是在完成上一次执行和下一次执行开始之间等待该时间间隔?

(或者,比较Java的时候ScheduledExecutorService方法-是的setInterval相似scheduleAtFixedRate()或者说scheduleWithFixedDelay()?)

javascript setinterval

4
推荐指数
1
解决办法
974
查看次数

Spark - 从 S3 读取分区数据 - 分区是如何发生的?

当我使用 Spark 从 S3 读取多个文件时(例如一个包含许多 Parquet 文件的目录) -
逻辑分区是否在开始时发生,然后每个 executor 直接下载数据(在工作节点上)?
还是驱动程序下载数据(部分或全部)然后才进行分区并将数据发送给执行程序?

此外,分区是否会默认为用于写入的相同分区(即每个文件 = 1 个分区)?

amazon-s3 apache-spark

4
推荐指数
1
解决办法
6795
查看次数

使用 git 提交一个名为“.git”的目录

我有兴趣提交一个名为“.git”的目录,该目录位于我的存储库内的某个位置,但到目前为止我还没有找到一种使用 git 执行此操作的方法。

澄清一下,这实际上不是我的存储库的“.git”文件夹,而是我的一个单元测试的资源目录,它恰好被命名为“.git”。在它里面有一个名为“gitfile”的文件。

我试过在目录名上使用“git add -f”,但得到了这些错误:

error: Invalid path '.../.git/gitfile'
error: unable to add .../.git/gitfile to index
fatal: adding files failed
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题来提交这个目录?

git

1
推荐指数
1
解决办法
270
查看次数

在 Parquet 中使用嵌套数据类型有什么好处?

在 Parquet 文件格式中使用嵌套数据类型是否有任何性能优势?

AFAIK Parquet 文件通常是专门为查询服务创建的,例如 Athena,因此创建这些文件的过程也可以简单地展平值 - 从而允许更容易的查询、更简单的架构,并保留每列的列统计信息。

使用嵌套数据类型有什么好处,例如struct

nested data-files apache-spark parquet

1
推荐指数
1
解决办法
8163
查看次数

Parquet 文件存储哪些级别的最小/最大/不同(等)统计信息?

我知道 Parquet 文件存储列统计信息column每个行组内的级别上存储列统计信息,以允许对数据进行更有效的查询。

它是否还存储该file级别的列统计信息(以避免不必要地读取整个文件)?栏目page级别怎么样?

apache-spark parquet

1
推荐指数
1
解决办法
4481
查看次数

Spark:Avro vs Parquet性能

既然Spark 2.4内置了对Avro格式的支持,我正在考虑更改我的数据湖中某些数据集的格式-通常将这些数据集查询/合并为整个行,而不是特定的列聚合-从Parquet更改为阿夫罗

但是,数据之上的大部分工作都是通过Spark完成的,据我所知,Spark的内存中缓存和计算是在列格式的数据上完成的。Parquet是否在这方面提供性能提升,而Avro会带来某种形式的数据“转换”损失?在这方面,我还应注意其他哪些注意事项?

avro apache-spark parquet

0
推荐指数
1
解决办法
1903
查看次数