我和我的同事现在有几个星期有争议.我想听听社区对此的看法.
我们在申请中使用guice.在这个应用程序的UI部分,我更喜欢通过DI和自定义注释(也就是工厂的位置)来实例化所有字段和组件,并在buildUI方法中将它们连接起来.
看起来如下:
我的方法:
@Inject
@PreConfigured(caption="foo", width="100%")
Label field;
private void buildUI() {
this.addComponent(field);
}
Run Code Online (Sandbox Code Playgroud)
我还写了一些数据绑定和i18n的注释.
我的同事这样做:
他的方法:
private Label field;
private void buildUI() {
field = new Label();
field.setCaption("foo");
field.setWidth("100%");
this.addComponent(field);
}
Run Code Online (Sandbox Code Playgroud)
这里的代码可能很长.考虑到数据绑定和其他主题,第二个代码可以变得更长,而我的方法只是另一个注释.
我的理由是:
他的理由是:
但是,我还阅读了福勒的一些文章,他说,定位注射(用场注射替代)是一个糟糕的设计决定.但是在其他项目中没有重用的视图呢?
Field Injection是一个糟糕的设计吗?或者上面介绍的另一种方式更优雅?
亲切的问候基督徒
PS:我知道讨论只是基于意见而开始,但这是一个长期持续的讨论(setter vs constructor injection),这可能是值得放手的.
我的文件中有一个 husky 预提交钩子package.json:
"husky": {\n "hooks": {\n "pre-commit": "npx pretty-quick --staged"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我的项目中还有一个.prettierrc文件:
{\n "printWidth": 100,\n "singleQuote": false,\n "trailingComma": "all"\n}\nRun Code Online (Sandbox Code Playgroud)\n我的问题是,当我更改文件(已正确格式化)并运行时,npx pretty-quick --staged我会看到我所期望的内容:
Finding changed files since git revision 88264bc2a.\n Found 1 changed file.\n\xe2\x9c\x85 Everything is awesome!\nRun Code Online (Sandbox Code Playgroud)\n但是当我尝试使用git commit钩子运行相同的命令时,我得到以下输出:
husky > pre-commit (node v14.17.0)\n Finding changed files since git revision 88264bc2a.\n Found 1 changed file.\n\xe2\x9c\x8d\xef\xb8\x8f Fixing up src/somefile.ts.\n\xe2\x9c\x85 Everything is awesome!\nRun Code Online (Sandbox Code Playgroud)\n它不应该修复该文件,因为它已经正确格式化。我检查了配置选项pretty-quick,没有选项可以确定它正在使用哪个更漂亮的配置,而且我也无法明确告诉它要使用哪个配置(尽管我只有一个 …
我读过ESR的文章"如何成为一名黑客?" 几年前(链接可以在我的个人资料中找到),Eric建议学习LISP.好吧,我正在学习LISP很长一段时间,我非常喜欢它,所以我决定使用它来编写一个Web应用程序.
由于我使用Spring一段时间,我认为编写分离的组件并使用IoC容器和依赖注入将它们粘合在一起是个好主意.我在google上进行了一次强力搜索,结果证明在LISP中没有实现这样的想法.我错过了什么吗?在LISP中有没有很好地实现这个概念,或者出于某种原因使用它是没有意义的,这对我来说还不清楚?
spring dependency-injection common-lisp inversion-of-control
我正在浏览Java代码,我看到已经使用某个接口分配了对象,并且此接口包含一些使用newoperator 分配对象的方法.我无法想到他们为什么使用接口而不是直接使用new运算符分配对象.例如:
Animal animal = new Animal();
Run Code Online (Sandbox Code Playgroud)
要么
Animal animal = interface.allocateAnimal()
Run Code Online (Sandbox Code Playgroud)
这interface是一个界面,它有一个allocateAnimal什么都不做
的方法new Animal().
所以最终我们做的是同样的事情,但是以不同的方式,所以在这里获得了什么?
编辑1:实际上接口是在其他地方实现的.所以接口不包含任何实现代码,它只包含方法.
每个身体
运行服务器时出现异常,我认为是内存泄漏!
我尝试了参数 JAVA_OPS 的许多值,但仍然出现异常!!!
在控制台中,我得到了这个异常,你可以看到如下!
Nov 18, 2013 2:48:48 PM org.apache.catalina.startup.HostConfig deployDescriptors
SEVERE: Error waiting for multi-thread deployment of context descriptors to complete
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
at java.util.concurrent.FutureTask.get(Unknown Source)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:578)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1401)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:317)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:347)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.OutOfMemoryError: PermGen space …Run Code Online (Sandbox Code Playgroud) 在Scheme中,我可以这样做:
(define (adder)
(define (one) 1)
(define (two) 2)
(+ (one) (two)))
Run Code Online (Sandbox Code Playgroud)
调用adder的结果3,同时呼吁one,因为会产生一个错误one是只的范围内可见adder.
在Clojure,如果我做类似的事情
(defn adder []
(defn one [] 1)
(defn two [] 2)
(+ (one) (two)))
Run Code Online (Sandbox Code Playgroud)
one并two会污染我的命名空间,因为defn使用def内部这在当前的命名空间创建绑定.
是否有一个函数/宏在本地范围内创建命名函数?
我的问题的原因是我习惯了Scheme的工作方式.以这种方式命名我的本地函数通常会使我的代码更具可读性.
在a中HashMap,如果我将自定义对象作为键.
如果我覆盖hashCode()方法并实现它以将值传递为' 1',会发生什么
; 会不会有任何表现?
如果我改变hashCode()方法以使用Math.random()函数返回随机值会对性能产生什么影响?
我正在尝试使用 Java 中的 BouncyCastle 使用 ECC 算法加密一些内容。但是我得到了 BouncyCastle 库的例外,说不能投射JCEECPublicKey到IESKey. 据我所知,生成的公钥KeyPairGenerator是JCEECPublicKey不能在javaCipher.init方法中使用的。有人可以告诉我如何将其转换为公钥或 X509 规范,以便我可以在加密中使用它。
这是我试过的代码
// add instance of provider class
Security.addProvider(new BouncyCastleProvider());
// initializing parameter specs secp256r1/prime192v1
ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("prime192v1");
// key pair generator to generate public and private key
KeyPairGenerator generator = KeyPairGenerator.getInstance("ECDH", new BouncyCastleProvider());
// initialize key pair generator
generator.initialize(ecSpec);
// Key pair to store public and private key
KeyPair keyPair = generator.generateKeyPair();
Cipher iesCipher = Cipher.getInstance("ECIES", new …Run Code Online (Sandbox Code Playgroud) 我刚刚发现了Undertow是如何工作的,我对它的api感到惊讶:
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
Run Code Online (Sandbox Code Playgroud)
有没有办法以某种方式使用更方便的servlet api?
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServletRequest request, final HttpServletResponse response) throws Exception {
// ...
}
}).build();
server.start();
Run Code Online (Sandbox Code Playgroud)
我想要实现的是替换当前使用的Undertow使用servlet api的Jetty容器,但是在阅读了文档和源代码后,我似乎找不到这样做的方法.我没有使用.war文件只是一个嵌入式Jetty.有人有指针吗?
在Java中,JDK中的大多数(或所有?)通用类都具有个位数的通用类型名称。例如HashMap,的定义如下所示:
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable {
Run Code Online (Sandbox Code Playgroud)
为什么这是约定而不是更具描述性的类型名称HashMap<KEY,VALUE>?
java ×7
bouncycastle ×1
clojure ×1
collections ×1
common-lisp ×1
cryptography ×1
dictionary ×1
encryption ×1
generics ×1
git ×1
husky ×1
memory-leaks ×1
node.js ×1
prettier ×1
scheme ×1
scope ×1
servlets ×1
spring ×1
tomcat ×1
typescript ×1
undertow ×1