使用自动装配的bean调用实例方法

时间:2016-10-11 05:55:28

标签: java spring-mvc

我的应用程序中有三个类(Class A ,Class B ,Class C )。

我是初学者。尝试使用@Autowired注释在类 A 中注入类 B 的bean。我想利用spring bean的Singleton行为,以便只有Class B 的实例,无论从 A 类调用多少次。

Class B 中有一种方法,我想使用Class B 这个bean从Class A 调用它。我怎样才能做到这一点?

我知道如何在Java中实现单例类,然后获得唯一的实例来调用它的方法,但不知道如何使用spring singleton bean来实现它。

2 个答案:

答案 0 :(得分:2)

Spring singleton被定义为"每个bean的每个容器"

如果你想在每个弹簧容器中使用单例,那么你需要在bean定义

中完成
<bean id="myBean" class="MyBean"/>

如果你想要每个整个应用程序而不是每个容器的单例,那么我相信你能做到的唯一方法是实现一个Singleton模式有一个私有构造函数,从其静态方法如getInstance访问/检索它。你可以做的是让spring调用一个方法来反过来返回一个对象

<bean id="myBean" class="MyBean" factory-method="getInstance"></bean> 

答案 1 :(得分:0)

标记为@Component@Service@Repository等的每个类都是单身,但仅限于弹簧容器内。所以最好说它们在single scope

@Component
public class MyBean {
    [...]
}

在单例范围内定义bean的另一个选项是将方法标记为@Bean。返回类型将被缓存,因此如果您调用此方法,则将始终使用相同的实例:

@Service
public class MyService {

    [...]

    @Bean
    @Scope("singleton")
    public MyOtherBean myOtherBean() { // singleton factory method
        return [...];
    }

}

@Bean只应在@Configuration - bean中使用。在@Service bean中,您可以注入所需的bean(@Autowired)。