- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
浏览 Spring Javaconfig 引用文档 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/beans.html我发现了一些令人困惑的部分......
在 "5.12.4 使用 @Configuration 注释" 部分下它说:
“当@Beans 相互依赖时,表达这种依赖就像让一个bean 方法调用另一个bean 方法一样简单:
@Configuration
public class AppConfig {
@Bean
public Foo foo() {
return new Foo(bar());
}
@Bean
public Bar bar() {
return new Bar();
}
}
在上面的示例中,foo bean 通过构造函数注入(inject)接收到对 bar 的引用。”
好吧,如果一切都是无状态的,那可能并不重要,但如果你有上面的配置,然后在你的应用程序中做:
@Autowired
private Foo foo;
@Autowired
private Bar bar;
检查 bean 的 hashCodes,事实证明,您的私有(private)变量 bar 将引用 Bar 的 不同实例,而不是foo 使用的一个,这可能不是你所期望的,对吧?
我想说正常的模式应该是:
@Configuration
public class AppConfig {
@Bean
public Bar bar() {
return new Bar();
}
@Autowired Bar bar;
@Bean
public Foo foo() {
return new Foo(bar);
}
}
现在,当您在应用中 Autowiring 两个 bean 时,您只会创建一个 Bar 实例。
我是否遗漏了什么,或者我是否纠正了这里的文档有问题?
然后,再往下,在 “有关基于 Java 的配置如何在内部工作的更多信息”部分下看起来他们试图“澄清”这个问题:
@Configuration
public class AppConfig {
@Bean
public ClientService clientService1() {
ClientServiceImpl clientService = new ClientServiceImpl();
clientService.setClientDao(clientDao());
return clientService;
}
@Bean
public ClientService clientService2() {
ClientServiceImpl clientService = new ClientServiceImpl();
clientService.setClientDao(clientDao());
return clientService;
}
@Bean
public ClientDao clientDao() {
return new ClientDaoImpl();
}
}
现在,不幸的是,这个配置甚至不会在运行时加载,因为有 2 个相同类型的 bean,ClientService,没有区分属性,所以得到异常
org.springframework.beans.factory.NoUniqueBeanDefinitionException:
No qualifying bean of type [.....] is defined:
expected single matching bean but found 2
但即使我们稍微改变示例,并给前 2 个 bean 不同的类型,
@Bean
public ClientService1 clientService1() {...clientDao()...}
@Bean
public ClientService2 clientService2() {...clientDao()...}
@Bean
public ClientDao clientDao() {
return new ClientDaoImpl();
}
这仍然是不正确的,因为——与文本声称的相反——我们仍然会创建 3 个不同的 ClientDaoImpl 实例, Autowiring 所有 3 个 bean 时。
再说一次,我是完全遗漏了什么,还是文档真的像我认为的那样糟糕?
编辑:添加了一个演示我看到的问题:
一个 bean ServiceA,以及构造函数注入(inject) ServiceA 的两个 bean ServiceB1、ServiceB2。
然后是两个测试类 Config01Test 和 Config02Test,除了配置之外,它们是相同的。第一次测试通过,第二次因为唯一性断言而失败。
最佳答案
检查您的配置类上是否有 @Configuration
注释。在您的演示中,至少 Config01
和 Config02
类中缺少它们。如果我将它们添加到这些类中,则测试通过。
关于Spring Javaconfig bean间依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25943116/
根据 Android docs ,activity生命周期如下: onCreate() onStart() onResume() onPause() onStop() onDestroy() 问题是,
我有一门类(class)有很多专栏,但这个问题只需要其中三个: ---------------------------------------- | start_date | start_time
给定在同一个 Tomcat 6 上运行的两个 Web 应用程序。如果您从一个应用程序到另一个应用程序进行 http 调用,Tomcat 是否会“短路”此调用,或者它会在调用之前一直在 interweb
我是一名优秀的程序员,十分优秀!