我有循环依赖和java配置.虽然使用xml配置解析它非常容易,但我无法使用没有@Autowired的java配置解析它.豆子:
public class A {
private B b;
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
}
public class B {
private A a;
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个(我已经读过,使用@Bean注释Spring每次引用bean时都不会调用方法,但在这种情况下它实际上一直被调用):
@Configuration
public class Config {
@Bean
public A a() {
A a = new A();
a.setB(b());
return a;
}
@Bean
public B b() {
B b = new B();
b.setA(a()); …Run Code Online (Sandbox Code Playgroud) 我们有微服务,可以处理不同但相关的数据.例如,广告及其统计信息.我们希望能够为UI过滤,排序和聚合这些相关数据(而不仅仅是为了它).例如,我们希望向用户展示其文字中包含"car"且点击次数超过100次的广告.
挑战:
要求:
我们可以想到的解决方案:
我们应该注意什么?还有其他方法可以解决我们的问题吗?
假设我有这样一个类:
public static class Test {
private Optional<String> something;
public Optional<String> getSomething() {
return something;
}
public void setSomething(Optional<String> something) {
this.something = something;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我反序列化这个JSON,我得到一个空的可选:
{"something":null}
Run Code Online (Sandbox Code Playgroud)
但是如果缺少属性(在这种情况下只是空JSON),我得到null而不是Optional.我当然可以自己初始化字段,但我认为最好有一个null和缺少属性的机制.那么有没有办法让jackson反序列化缺少的属性为空可选?
我想要一个带有动态属性的标签,比如简单的html标签,例如:
<tags:superTag dynamicAttribute1="value" someOtherAttribute="valueOfSomeOther"/>
Run Code Online (Sandbox Code Playgroud)
在我的标签实现中我希望有这样的东西:
public class DynamicAttributesTag {
private Map<String,String> dynamicAttributes;
public Map<String, String> getDynamicAttributes() {
return dynamicAttributes;
}
public void setDynamicAttributes(Map<String, String> dynamicAttributes) {
this.dynamicAttributes = dynamicAttributes;
}
@Override
protected int doTag() throws Exception {
for (Map.Entry<String, String> dynamicAttribute : dynamicAttributes.entrySet()) {
// do something
}
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我想指出这些动态属性将由jsp中的手写入,而不是像Map一样传递${someMap}.有没有办法实现这个目标?
今天我遇到了一个case类构造函数的奇怪问题.我想让一个构造函数私有,似乎它不是问题.所以我在我的一个项目中尝试过它并且有效.但在另一个项目中,我可以调用私有构造函数并进行编译.我认为这是我的ide的东西,所以我创建了一个独立的类并用scalac编译它.它编译.这是代码:
package com.test
object Main {
def main(args: Array[String]) {
val bar = Bar("12345")
// bar.doStuff()
println(bar)
}
}
case class Bar private(foo: String){
private def doStuff():Unit = println("stuff")
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我取消注释bar.doStuff()它将无法编译.所以我假设在这种情况下私有工作,但不知何故不适用于构造函数.我究竟做错了什么?Scalac是2.11.8
我有一个特征和扩展它的对象。
trait Common[K] {
def name: String
def encode(k: K): String = name + k.toString
}
object A extends Common[Int] {
override def name: String = "a"
}
object B extends Common[Int] {
override def name: String = "b"
}
object C extends Common[Int] {
override def name: String = "c"
}
Run Code Online (Sandbox Code Playgroud)
我想创建此对象的列表并在其上映射:
val hl = A :: B :: C :: HNil
val result: List[Int => String] = hl.map(EncodePoly).toList
Run Code Online (Sandbox Code Playgroud)
和实现Poly功能的不同尝试:
object EncodePoly extends Poly1 {
implicit def indCase[K]: Case.Aux[Common[K], …Run Code Online (Sandbox Code Playgroud) 我是 Rust 新手,如果我使用的术语不正确,我很抱歉。也许我对问题的用词选择不正确。
我正在玩流,我需要在流元素之间有一些延迟。所以我写了这个:
use futures::stream;
use futures::StreamExt;
use tokio::time;
#[tokio::main]
async fn main() {
let mut stream = stream::iter(0..1000).then(|x| async move {
time::delay_for(std::time::Duration::from_millis(500)).await;
x + 1
});
while let Some(x) = stream.next().await {
println!("{:?}", x)
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了很多编译错误,但最重要的错误与固定有关。他们来了:
error[E0277]: `std::future::from_generator::GenFuture<[static generator@src/main.rs:7:64: 10:6 x:_ _]>` cannot be unpinned
--> src/main.rs:11:32
|
11 | while let Some(x) = stream.next().await {
| ^^^^ within `futures_util::stream::stream::then::_::__Then<'_, futures_util::stream::iter::Iter<std::ops::Range<{integer}>>, impl core::future::future::Future, [closure@src/main.rs:7:49: 10:6]>`, the trait `std::marker::Unpin` is not implemented for `std::future::from_generator::GenFuture<[static generator@src/main.rs:7:64: 10:6 x:_ _]>` …Run Code Online (Sandbox Code Playgroud) 关于正确的响应状态有很多问题,但是我不明白应该为正常的业务异常使用哪种状态。我已经读过400的定义,在我看来,它似乎是因为通讯错误。
由于某些东西被认为是客户端错误(例如,格式不正确的请求语法,无效的请求消息框架或欺骗性的请求路由),服务器无法或将不会处理请求。
可以说客户想要确认一些操作。他向我发送了我理解并处理的绝对正确,有效的请求。但是确认码不正确。因此,这是一个错误,但是此错误是正常现象,可以预料,我们的沟通是正确的。或另一个例子:客户想从帐户中提取一些钱。再次,请求是正确和有效的,但是帐户没有足够的钱。我现在要使用400,但是在我看来400是因为客户端和服务器之间的通信错误,而不是应用程序逻辑错误。也许对于此类错误有更合适的状态?你用什么?
假设我有一个自己创建Actor的父演员.
public static class Parent extends UntypedActor {
private ActorRef child = context().actorOf(Props.create(Child.class));
@Override
public void onReceive(Object message) throws Exception {
// do some stuff
child.tell("some stuff", self());
}
}
public static class Child extends UntypedActor {
@Override
public void onReceive(Object message) throws Exception {
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么能嘲笑这个孩子的演员呢?谷歌没有给我任何合理的结果.Akka的文档告诉我,创建演员是一种很好的做法.但是,如果我甚至无法测试我的演员,我怎么能遵循这种做法呢?
我想获取几条消息,处理它们并在此之后将它们全部确认。所以基本上我收到一条消息,把它放在某个队列中并继续接收来自rabbit 的消息。不同的线程将使用接收到的消息监视此队列,并在数量足够时处理它们。我所能找到的关于 ack 的所有示例仅包含在同一线程上处理的一条消息的示例。像这样(来自官方文档):
channel.basicQos(1);
final Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
try {
doWork(message);
} finally {
System.out.println(" [x] Done");
channel.basicAck(envelope.getDeliveryTag(), false);
}
}
};
Run Code Online (Sandbox Code Playgroud)
还有文档说:
通道实例不能在线程之间共享。应用程序应该更喜欢每个线程使用一个通道,而不是跨多个线程共享同一个通道。虽然通道上的某些操作可以安全地并发调用,但有些操作不是,并且会导致在线上不正确的帧交错。
所以我在这里很困惑。如果我正在确认一些消息,同时通道正在接收来自rabbit 的另一条消息,它是否被认为是当时的两个操作?在我看来,是的。
我试图确认来自不同线程的同一通道上的消息,它似乎有效,但文档说我不应该在线程之间共享通道。所以我试图用不同的频道在不同的线程上做确认,但它失败了,因为这个频道的交付标签是未知的。
是否可以确认不在收到消息的同一线程上的消息?
UPD 我想要的代码示例。它在 Scala 中,但我认为它很简单。
case class AmqpMessage(envelope: Envelope, msgBody: String)
val queue = new ArrayBlockingQueue[AmqpMessage](100)
val consumeChannel = connection.createChannel()
consumeChannel.queueDeclare(queueName, …Run Code Online (Sandbox Code Playgroud)