我很好奇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) 假设你有一个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)
所以,现在我想stream在List和collect它所有的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 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.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) 我正在尝试删除一组中长度均匀的所有字符串.到目前为止,这是我的代码,但是我无法从增强型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) 我正在使用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) 我需要与之相反@JsonIgnore,我需要告诉杰克逊忽略对象上的所有属性,除了我注释的对象.我不小心想要有人添加一个属性而忘记添加一个@JsonIgnore然后我将它暴露在我不想要的地方.
谁知道如何实现这一目标?
我知道这是一个有点长的问题,但任何帮助将不胜感激.
简短版本就是我希望有一组容器在多个主机上相互通信,并且可以通过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)
我不放弃,但我会感激一些帮助.
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中有没有任何方法可以获取它显示的日期模式?
我想知道将数据存储到关系或节点中是否有任何优点或缺点.
例如,如果我要将与讨论相关的注释存储到数据库中,是否应将注释数据存储在"注释"关系或通过单独关系与讨论相关的"注释"节点中.