关键词:
点击关注公众号,实用技术文章及时了解
来源:blog.csdn.net/showchi/article/details/97005720
注意:调用者要被spring管理
目录
方式一 注解@PostConstruct
方式二 启动类ApplicationContext
方式三 手动注入ApplicationContext
方式一 注解@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
* @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
* @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
* @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
* @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);
以上三种方式楼主都测试过可以为完美使用
推荐:
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
bean无法被注入的常见问题和springboot的三种扫描并加载bean方式(代码片段)
一、bean无法被注入的常见问题某个类中的成员,如果是采用@Autowired注入SpringBean,则当前类的实例,必须也是SpringBean才能成功注入,即该实例不能用newxxx()来获得,这种方式获得的实例无法调用@Autowired... 查看详情
springboot获取yml内容的三种方式
参考技术Aspringboot中有三种方式可以获取yml配置文件中的配置内容。yml如下注意,使用ConfigurationProperties后可能会有如下报错:虽不影响运行,但是很碍眼,可通过在springboot项目的pom文件中添加如下依赖解决:分别访问三个测试... 查看详情
spring管理bean的三种创建方式
...ng支持如下三种方式创建Bean1:调用构造器创建Bean2:调用静态工厂方法创建Bean3:调用实例工厂方法创建Bean一:调用构造方法创建Bean 调用构造方法创建Bean是最常用的一种情况Spring容器通过new关键字调用构造器来创建Bean实例... 查看详情
读取springboot的三种方式
参考技术A1.通过Value注解<code>packagecom.hengan.springboottest.controller;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassHelloCo... 查看详情
spring实例化bean的三种方式
...在Spring中,实例化Bean有三种方式:1、构造器实例化;2、静态工厂方式实例化;3、实例化工厂方式实例化构造器实例化:Spring容器通过Bean对应的类中默认的构造器函数实例化Bean.1-1、创建一个实体类Person1packagecom.mengma.instance.cons... 查看详情
通过beandefinitionreader获取beandefinition的三种不同方式(代码片段)
...ean的定义信息。后续生成完整Bean时,直接从该集合中获取。该集合在DefaultListableBeanFactory类中,是一个十分重要的类。前期准备 查看详情
反射:获取class对象的三种方式(代码片段)
...etClass();*2任何数据类型(包括基本数据类型)都有一个“静态”的class属性*3通过Class类的静态方法:forName(StringclassName)(常用)**/publicclassFanshepublicstaticvoidm 查看详情
springmvc访问静态资源的三种方式
...果你的DispatcherServlet拦截*.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。 目的:可以正常访问静态文件,不要找不到静态文... 查看详情
springmvc访问静态资源的三种方式
...何你的DispatcherServlet拦截*.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg的访问也就被拦截了。 方案一:激活Tomcat的defaultServlet来处理静态文件1<... 查看详情
三种获取当前时间戳的方式
参考技术A以下是获取当前时间的时间戳的三种方式:如果你已经放弃了IE8,你可以转而使用Date.now()静态方法来获取时间戳。 查看详情
spring框架装配bean的三种方式
欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系。本系列教程希望您能站在上帝的角度去观察(了... 查看详情
springmvc访问静态资源的三种方式(转)
本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html如何你的DispatcherServlet拦截*.do这样的URL,就不存在访问不到静态资源的问题。如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.j 查看详情
spring创建bean的三种方式
1、使用构造器创建bean1.1、使用无参构造器创建packagecom.ly.spring;publicclassPerson{privateStringname;publicvoidsay(Stringname){System.out.println("你好,我叫"+name);}}<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns 查看详情
spring生成entitymanagerfactory的三种方式
spring生成EntityManagerFactory的三种方式1.LocalEntityManagerFactoryBean只是简单环境中使用。它使用JPAPersistenceProvider自动检测机制(accordingtoJPA‘sJavaSEbootstrapping),并且大多数情况下,你只能定义一下persistenceunitname例如:<beans><be 查看详情
spring中创建bean对象的三种方式以及作用范围
...时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式:1.使用默认构造函数创建。在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时采用的就是默认构造函数创建bean对象,此时如... 查看详情
spring提供的三种装配bean方式(代码片段)
在Spring中,对象不需要自己查找或创建与其所关联的其他对象,Spring容器负责把需要相互协作的对象引用赋予各个对象。创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入(DI)的本质。Spring提供了三种... 查看详情
dubbo与springboot的三种整合方式
SpringBoot与dubbo整合的三种方式:1、导入dubbo-starter,在application.properties配置属性,使用@Service暴露服务,使用@Reference引用服务,使用@EnableDubbo开启dubbo注解(或者在application.properties中配置dubbo.scan.base-packages=com.lina02.gmall)2、保留 查看详情
spring实例化bean的三种方法
1.用构造器来实例化 [html] viewplain copy print?<bean id="hello2" class="com.hsit.hello.impl.ENhello" /> 2.使用静态工厂方法实例化 要写一个bean,bean中定义一个静态方 查看详情