版权声明:本文为IT晓白博主原创文章,转载请附上博文链接! https://blog.csdn.net/qq_38617531/article/details/83627921
思路步骤:
1.定义工具类SpringUtil的静态方法和静态引用。
2.实现接口ApplicationContextAware的setApplicationContext方法。
3.spring容器会在创建该对象过程中,将自身引用注入对象中(Component注解,让spring扫描到该bean)。
编码步骤
1.编写springutil:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringUtil implements ApplicationContextAware {
private static ApplicationContext spring;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(spring == null) {
spring = applicationContext;
}
//获取applicationContext
public static ApplicationContext getApplicationContext() {
return spring;
}
//通过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);
}
}
2.测试准备
2.1我们在启动的时候先通过代码方式给spring容器中注入一个bean,入下所示
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeanConfig {
@Bean(name="testDemo")
public Demo generateDemo() {
Demo demo = new Demo();
demo.setId(123);
demo.setName("test");
return demo;
}
}
2.2实体Demo类
import lombok.Data;
@Data public class Demo {
private int id;
private String name;
}
3、测试
然后我们编写测试controller,并从刚才写的springutil中获取这个bean
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/application")
public class TestApplicationController {
@RequestMapping("/test")
public Object testSpringUtil() {
return SpringUtil.getBean("testDemo");
}
}