详解SpringBoot静态方法获取bean的三种方式
程序员文章站
2022-06-23 10:14:15
目录方式一 注解@postconstruct方式二 启动类applicationcontext方式三 手动注入applicationcontext方式一 注解@postconstructimport...
方式一 注解@postconstruct
import com.example.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() { return staticautomethoddemoservice.test(); } }
注解@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 org.springframework.context.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 = application.ac.getbean(automethoddemoservice.class); string test2 = methoddemoservice.test2(); system.out.println(test2); } }
方式三 手动注入applicationcontext
手动注入applicationcontext
import org.springframework.beans.beansexception; import org.springframework.context.applicationcontext; import org.springframework.context.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 != null?applicationcontext.getbean(clazz):null; } }
调用方式
/** * 方式三 */ @test public void method_3() { automethoddemoservice automethoddemoservice = staticmethodgetbean_3.getbean(automethoddemoservice.class); string test3 = automethoddemoservice.test3(); system.out.println(test3); }
以上三种方式楼主都测试过可以为完美使用
到此这篇关于详解springboot静态方法获取bean的三种方式的文章就介绍到这了,更多相关springboot静态方法获取bean内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
Spring基本用法4——创建Bean的三种方式 博客分类: Spring Spring创建Bean的三种方式静态工厂方法实例工厂方法
-
详解springboot的三种启动方式
-
详解springboot的三种启动方式
-
springboot如何获取相对路径文件夹下静态资源的方法
-
SpringBoot注册Servlet的三种方法详解
-
jQuery使用JSONP实现跨域获取数据的三种方法详解
-
Spring在代码中获取bean的几种方式详解
-
jQuery使用JSONP实现跨域获取数据的三种方法详解
-
一个jsp页面引入另一个jsp页面的三种方式及静态引入和动态引入的区别详解
-
详解SpringBoot静态方法获取bean的三种方式