Может ли кто-нибудь объяснить мне, почему @Bean
по статическому методу возвращает 2 разных экземпляра?@Bean аннотация по статическому методу
Я могу понять, что @Bean
по методу, не статическому, как класс A
, возвращает тот же экземпляр, поскольку область по умолчанию является singleton.
И если я попытаюсь ввести класс B
с @Autowire
в службу, это не сработает, поэтому похоже, что это не загрузка контекста приложения Spring. Так что с использованием класса D
будет схоже!? Я думаю, не потому, что для @PropertySource
мы должны использовать в дополнение (используется для заполнителем):
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
и если удалить @Bean из этого, он не будет работать.
Есть ли другой вариант использования, когда было бы полезно использовать @Bean для статического метода?
Пример:
когда я бегу:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Conf.class})
public class Test {
@org.junit.Test
public void test(){
}
}
для
@Configuration
@ComponentScan
public class Conf {
@Bean
public A aaa(){
return new A();
}
@Bean
public static B bbb(){
return new B();
}
@Bean
@Scope("prototype")
public C ccc(){
return new C();
}
public static D ddd(){
return new D();
}
@PostConstruct
public void post(){
System.out.println(aaa());
System.out.println(aaa());
System.out.println(bbb());
System.out.println(bbb());
System.out.println(ccc());
System.out.println(ccc());
System.out.println(ddd());
System.out.println(ddd());
}
}
public class A {
}
public class B {
}
public class C {
}
public class D {
}
я получаю:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]