实现ApplicationContextAware接口
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public Object getBeanByName(String beanName) {
return applicationContext.getBean(beanName);
}
public <T> T getBeanByClass(Class<T> cls) {
return applicationContext.getBean(cls);
}
}
模拟需求:通过Spring上下文获取DemoBean对象,并调用getBeanObj方法
@Component
public class DemoBean {
@Bean
public DemoDTO getBeanObj() {
DemoDTO demoDTO = new DemoDTO();
demoDTO.setCode("test code");
demoDTO.setName("test name");
return demoDTO;
}
@Data
class DemoDTO {
private String code;
private String name;
}
}
通过名称的方式获取Bean对象
@Slf4j
@SpringBootTest
class MiaoApplicationTests {
@Autowired
ApplicationContextProvider contextProvider;
@Test
void contextLoads() {
DemoBean demoBean = (DemoBean) contextProvider.getBeanByName("demoBean");
log.info("demoBean:{}", demoBean.getBeanObj());
}
}
通过类型的方式获取Bean对象
@Slf4j
@SpringBootTest
class MiaoApplicationTests {
@Autowired
ApplicationContextProvider contextProvider;
@Test
void contextLoads() {
DemoBean demoBean = contextProvider.getBeanByClass(DemoBean.class);
log.info("demoBean:{}", demoBean.getBeanObj());
}
}