一、@Autowired注解方式
@RestController
@RequestMapping("/name")
public class OtherController {
/// 默认按照类型(包含子类)查找,指定名称时按照名称查找
@Autowired
/// @Qualifier("otherServiceImpl")
private OtherService otherService;
......
}
二、静态方法方式
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* Springboot静态方法获取bean
*/
@Component
public class MyApplicationContextAware implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/// 启动时自动执行,传参 org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
MyApplicationContextAware.applicationContext = applicationContext;
}
/// 传参样例:com.smy.other.controller.OtherController
public static <T> T getBean(String className) throws ClassNotFoundException {
Class<T> clazz = (Class<T>) Class.forName(className);
return getBean(clazz);
}
/// 传参样例:OtherController.class
public static <T> T getBean(Class<T> clazz) {
return applicationContext != null ? applicationContext.getBean(clazz) : null;
}
/// 传参样例:OtherController.class, otherController
public static <T> T getBean(Class<T> clazz, String beanName) {
return applicationContext != null ? applicationContext.getBean(beanName, clazz) : null;
}
}
或
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class OtherApplication {
public static ConfigurableApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = SpringApplication.run(OtherApplication.class, args);
}
}