小编was*_*ren的帖子

在Spring java配置中调用@Bean注释方法

我很好奇Spring注入如何处理使用@Bean注释调用方法.如果我@Bean在一个方法上放一个注释,并返回一个实例,我明白这会告诉spring通过调用该方法并获取返回的实例来创建一个bean.但是,有时该bean必须用于连接其他bean或设置其他代码.这样做的通常方法是调用带@Bean注释的方法来获取实例.我的问题是,为什么这不会导致有多个bean浮动的实例?

例如,请参阅下面的代码(取自另一个问题).该entryPoint()方法用注释@Bean,所以我想春天会创建BasicAuthenticationEntryPoint一个bean 的新实例.然后,我们entryPoint()再次在configure块中调用,但它似乎entryPoint()返回bean实例,并且没有多次调用(我尝试了日志记录,只有一个日志条目).我们可能会entryPoint()在配置的其他部分多次调用,并且我们总是会获得相同的实例.我对此的理解是否正确?Spring是否会对注释的方法进行一些神奇的重写@Bean

@Bean
public BasicAuthenticationEntryPoint entryPoint() {
    BasicAuthenticationEntryPoint basicAuthEntryPoint = new BasicAuthenticationEntryPoint();
    basicAuthEntryPoint.setRealmName("My Realm");
    return basicAuthEntryPoint;
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    http
        .exceptionHandling()
            .authenticationEntryPoint(entryPoint())
            .and()
        .authorizeUrls()
            .anyRequest().authenticated()
            .and()
        .httpBasic();       
}
Run Code Online (Sandbox Code Playgroud)

java spring cglib

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

Java 8 Streams:为什么Collectors.toMap对于带有通配符的泛型有不同的行为?

假设你有一个List数字.在该值List可以是类型的Integer,Double等等.当你声明这样的List有可能使用一个通配符(声明它?)或不用一个通配符.

final List<Number> numberList = Arrays.asList(1, 2, 3D);
final List<? extends Number> wildcardList = Arrays.asList(1, 2, 3D);
Run Code Online (Sandbox Code Playgroud)

所以,现在我想streamListcollect它所有的Map使用Collectors.toMap(显然下面的代码只是为了说明问题的例子).让我们开始流式传输numberList:

final List<Number> numberList = Arrays.asList(1, 2, 3D, 4D);

numberList.stream().collect(Collectors.toMap(
        // Here I can invoke "number.intValue()" - the object ("number") is treated as a Number
        number -> Integer.valueOf(number.intValue()),
        number -> number));
Run Code Online (Sandbox Code Playgroud)

但是,我不能对以下内容做同样的操作wildcardList:

final List<? extends Number> wildCardList …
Run Code Online (Sandbox Code Playgroud)

java generics lambda java-8 collectors

27
推荐指数
1
解决办法
2万
查看次数

Java 8 Streams:根据不同的属性多次映射同一个对象

我的一位同事向我提出了一个有趣的问题,我无法找到一个整洁而漂亮的Java 8解决方案.问题是流过POJO列表,然后根据多个属性在地图中收集它们 - 映射导致POJO多次出现

想象一下以下POJO:

private static class Customer {
    public String first;
    public String last;

    public Customer(String first, String last) {
        this.first = first;
        this.last = last;
    }

    public String toString() {
        return "Customer(" + first + " " + last + ")";
    }
}
Run Code Online (Sandbox Code Playgroud)

将其设置为List<Customer>:

// The list of customers
List<Customer> customers = Arrays.asList(
        new Customer("Johnny", "Puma"),
        new Customer("Super", "Mac"));
Run Code Online (Sandbox Code Playgroud)

备选方案1:使用Map"流"外部(或更确切地说是外部forEach).

// Alt 1: not pretty since the resulting map is …
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 collectors

26
推荐指数
1
解决办法
2万
查看次数

如何将java.util.Date转换为Java8 java.time.YearMonth

我怎样才能最好地将其转换java.util.Date为Java 8 java.time.YearMonth

不幸的是,以下抛出DateTimeException:

YearMonth yearMonth = YearMonth.from(date.toInstant());
Run Code Online (Sandbox Code Playgroud)

结果是:

java.time.DateTimeException: Unable to obtain YearMonth from TemporalAccessor: 2015-01-08T14:28:39.183Z of type java.time.Instant
at java.time.YearMonth.from(YearMonth.java:264)
...
Run Code Online (Sandbox Code Playgroud)

我需要此功能,因为我想YearMonth使用JPA 将值存储在数据库中.目前JPA不支持YearMonth,所以我想出了以下YearMonthConverter(省略了导入):

// TODO (future): delete when next version of JPA (i.e. Java 9?) supports YearMonth. See https://java.net/jira/browse/JPA_SPEC-63
@Converter(autoApply = true)
public class YearMonthConverter implements AttributeConverter<YearMonth, Date> {

  @Override
  public Date convertToDatabaseColumn(YearMonth attribute) {
    // uses default zone since in the end only dates are needed
    return attribute …
Run Code Online (Sandbox Code Playgroud)

jpa java.util.date java-8

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

从集中删除元素

我正在尝试删除一组中长度均匀的所有字符串.到目前为止,这是我的代码,但是我无法从增强型for循环中的迭代器中获取索引.

public static void removeEvenLength(Set<String> list) {
    for (String s : list) {
        if (s.length() % 2 == 0) {
            list.remove(s);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java string foreach set string-length

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

如何使用 Jackson 和 JsonPointer 查找具有动态节点名称的值

我正在使用Jackson(版本 2.6+)来解析一些看起来像这样的丑陋的JSON:

{ 
    "root" : { 
        "dynamic123" : "Some value"
    }
}
Run Code Online (Sandbox Code Playgroud)

dynamic123不幸的是,直到运行时才知道该属性的名称,并且可能会不时不同。我想要实现的是使用JsonPointer来获取 value "Some value"JsonPointer使用此处描述的类似XPath的语法。

// { "root" : { "dynamic123" : "Some value" } }
ObjectNode json = mapper.createObjectNode();
json.set("root", json.objectNode().put("dynamic123", "Some value"));

// Some basics
JsonNode document = json.at("");                      // Ok, the entire document
JsonNode missing = json.at("/missing");               // MissingNode (as expected)
JsonNode root = json.at("/root");                     // Ok -> { dynamic123 : "Some …
Run Code Online (Sandbox Code Playgroud)

java json jackson jsonpointer

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

Jackson 2.0忽略了课堂上的所有属性

我需要与之相反@JsonIgnore,我需要告诉杰克逊忽略对象上的所有属性,除了我注释的对象.我不小心想要有人添加一个属性而忘记添加一个@JsonIgnore然后我将它暴露在我不想要的地方.

谁知道如何实现这一目标?

java jackson

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

Docker编排

我知道这是一个有点长的问题,但任何帮助将不胜感激.

简短版本就是我希望有一组容器在多个主机上相互通信,并且可以通过SSH访问.我知道有这方面的工具,但我无法做到这一点.

长版本是:

有一个软件有多个组件,这些组件可以安装在任意数量的机器上.该软件有客户端和服务器端.客户端 - 服务器和服务器端组件都通过UDP端口进行通信.服务器使用CentOS,客户端使用Microsoft Windows.

我想创建一个由4个容器组成的测试环境,这些组件将分布在这些容器和客户端计算机上.docker主机是Ubuntu,容器是CentOS.如果我将所有组件安装在一个容器中,它就可以正常工作,如果有的话,那就更多了.根据日志它的工作但不是.

我读到你需要链接容器或使用像Maestro这样的协调器来做到这一点,但到目前为止我无法做到这一点.

我想要的是能够启动一个集合,如果容器在一个或多个主机上相互通信.我希望能够使用ssh访问这些容器,因此服务应该自动启动.

同样,对于容器使用ddns会很棒,因为名称会一次又一次地使用,但IP地址可能会改变,但这只是顶部的樱桃.

一些规格:

主机是全新安装的Ubuntu 12.04.4 LTS x86_64 Docker是最新版本.(lxc-docker 0.10.0)我使用了本机驱动程序.容器是一个简单的简单的centos从码头指数中拉出来的.我在容器上安装了一些基本内容:openssh-server,mc,java-jre.我将docker网络更改为可以从内部网络访问的网络.IP表规则已被清除,因为我不需要它们,但也尝试使用那些但没有运气.该/etc/default/docker文件的变化:

    DOCKER_OPTS="--iptables=false"
Run Code Online (Sandbox Code Playgroud)

或使用公开的API:

    DOCKER_OPTS="-H tcp://0.0.0.0:4243 --iptables=false"
Run Code Online (Sandbox Code Playgroud)

软件使用的端口在6000-9000之间,但我试图打开所有端口.运行命令的示例:

    docker run -h <hostname> -i -t  --privileged --expose 1-65535/udp <image> /bin/bash
Run Code Online (Sandbox Code Playgroud)

我也试过暴露的API:

    docker -H :4243 run -h <hostname> -i -t  --privileged --expose 1-65535/udp <image> /bin/bash
Run Code Online (Sandbox Code Playgroud)

我不放弃,但我会感激一些帮助.

linux docker

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

如何在java中获取默认日期模式?

public class DefaultDateFormatPattern {
    public static void main(String[] args) {
        System.out.println(new Date());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:Thu Jan 08 10:52:56 IST 2015

Java中有没有任何方法可以获取它显示的日期模式?

java formatting date

6
推荐指数
2
解决办法
3万
查看次数

Neo4J - 存储关系与节点

我想知道将数据存储到关系或节点中是否有任何优点或缺点.

例如,如果我要将与讨论相关的注释存储到数据库中,是否应将注释数据存储在"注释"关系或通过单独关系与讨论相关的"注释"节点中.

neo4j relationships graph-databases

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