详解SpringBoot静态⽅法获取bean的三种⽅式
⽬录
⽅式⼀注解@PostConstruct
⽅式⼆启动类ApplicationContext
⽅式三⼿动注⼊ApplicationContext
⽅式⼀注解@PostConstruct
ample.javautilsproject.service.AutoMethodDemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* springboot静态⽅法获取 bean 的三种⽅式(⼀)
* @author: clx
* @date: 2019/7/23
* @version: 1.1.0
*/
@Component
public class StaticMethodGetBean_1 {
@Autowired
private AutoMethodDemoService autoMethodDemoService;
@Autowired
private static AutoMethodDemoService staticAutoMethodDemoService;
@PostConstruct
public void init() {
staticAutoMethodDemoService = autoMethodDemoService;
}
public static String getAuthorizer() {
st();
}
}
springframework和springboot注解@PostConstruct说明
PostConstruct 注释⽤于在依赖关系注⼊完成之后需要执⾏的⽅法上,以执⾏任何初始化。此⽅法必须在将类放⼊服务之前调⽤。⽀持依赖关系注⼊的所有类都必须⽀持此注释。即使类没有请求注⼊任何资源,⽤ PostConstruct 注释的⽅法也必须被调⽤。只有⼀个⽅法可以⽤此注释进⾏注释。
应⽤ PostConstruct 注释的⽅法必须遵守以下所有标准:
该⽅法不得有任何参数,除⾮是在 EJB (interceptor) 的情况下,根据 EJB 规范的定义,在这种情况下它将带有⼀个 InvocationContext 对象;
该⽅法的返回类型必须为 void;
该⽅法不得抛出已检查异常;
应⽤ PostConstruct 的⽅法可以是 public、protected、package private 或 private;
除了应⽤程序客户端之外,该⽅法不能是 static;
该⽅法可以是 final;
如果该⽅法抛出未检查异常,那么不得将类放⼊服务中,除⾮是能够处理异常并可从中恢复的 EJB。
⽅式⼆启动类ApplicationContext
实现⽅式:在springboot的启动类中,定义static变量ApplicationContext,利⽤容器的getBean⽅法获得依赖对象
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import t.ConfigurableApplicationContext;
/**
* @author: clx
* @date: 2019/7/23
* @version: 1.1.0
*/
@SpringBootApplication
public class Application {
public static ConfigurableApplicationContext ac;
public static void main(String[] args) {
ac = SpringApplication.run(Application.class, args);
}
}
调⽤⽅式
/**
* @author: clx
* @date: 2019/7/23
* @version: 1.1.0
*/
@RestController
public class TestController {
/**
* ⽅式⼆
*/
@GetMapping("test2")
public void method_2() {
AutoMethodDemoService methodDemoService = Bean(AutoMethodDemoService.class);
String test2 = st2();
System.out.println(test2);
}
}
⽅式三⼿动注⼊ApplicationContext
⼿动注⼊ApplicationContext
import org.springframework.beans.BeansException;
import t.ApplicationContext;
import t.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* springboot静态⽅法获取 bean 的三种⽅式(三)
* @author: clx
* @date: 2019/7/23
* @version: 1.1.0
*/
@Component
public class StaticMethodGetBean_3<T> implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
StaticMethodGetBean_3.applicationContext = applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext != Bean(clazz):null;
}
}
调⽤⽅式
/**
* ⽅式三
*/
@Test
public void method_3() {
AutoMethodDemoService autoMethodDemoService = Bean(AutoMethodDemoService.class);
String test3 = st3();
System.out.println(test3);
}
以上三种⽅式楼主都测试过可以为完美使⽤
到此这篇关于详解SpringBoot静态⽅法获取bean的三种⽅式的⽂章就介绍到这了,更多相关SpringBoot静态⽅法获取bean内容
请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论