SpringBoot获取Bean
Springboot 获取Bean
·
一种最简单的方法是实现ApplicationContextAware类来获取容器中的bean:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
//通过class获取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
我们可以通过bean的名称、bean的类型或者bean的名称+类型来获取容器中的bean。
默认情况下,Spring容器中的bean是单例的,为此我做了一个测试,我创建了两个bean,一个是默认的,一个是我指定多例的:
import org.springframework.stereotype.Service;
/**
* 这是一个单例的bean
*/
@Service
public class BeanSingletonService {
}
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
/**
* 这是一个多例的bean
*/
@Service
@Scope("prototype")
public class BeanPrototypeService {
}
验证下我的想法:
import com.xqnode.learning.common.config.SpringContextUtil;
import com.xqnode.learning.service.BeanPrototypeService;
import com.xqnode.learning.service.BeanSingletonService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class LearningApplicationTests {
@Test
public void contextLoads() {
BeanSingletonService s1 = SpringContextUtil.getBean(BeanSingletonService.class);
BeanSingletonService s2 = SpringContextUtil.getBean(BeanSingletonService.class);
BeanPrototypeService p1 = SpringContextUtil.getBean(BeanPrototypeService.class);
BeanPrototypeService p2 = SpringContextUtil.getBean(BeanPrototypeService.class);
System.out.println("s1==s2: " + s1.equals(s2));
System.out.println("p1==p2: " + p1.equals(p2));
}
}
从结果中可以看到默认的BeanSingletonService 这个bean是单例的,两个对象完全相等,而我指定的BeanPrototypeService 这个bean则是多例的,两个bean不相同。
转载至:https://blog.csdn.net/xqnode/article/details/86563137
更多推荐
已为社区贡献3条内容
所有评论(0)