Java类获取Spring中bean的5种方式_java

获取Spring中的bean有很多种方式,再次总结一下:
第一种:在初始化时保存ApplicationContext对象

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");

说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring。
第二种:通过Spring提供的工具类获取ApplicationContext对象

import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");

说明:
1、这两种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例;
2、第一种方式在获取失败时抛出异常,第二种方式返回null。
第三种:继承自抽象类ApplicationObjectSupport

说明:通过抽象类ApplicationObjectSupport提供的getApplicationContext()方法可以方便的获取到ApplicationContext实例,进而获取Spring容器中的bean。Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
第四种:继承自抽象类WebApplicationObjectSupport

说明:和上面方法类似,通过调用getWebApplicationContext()获取WebApplicationContext实例;
第五种:实现接口ApplicationContextAware

说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext对象。Spring初始化时,会通过该方法将ApplicationContext对象注入。

虽然Spring提供了后三种方法可以实现在普通的类中继承或实现相应的类或接口来获取Spring的ApplicationContext对象,但是在使用时一定要注意继承或实现这些抽象类或接口的普通java类一定要在Spring的配置文件(即application-context.xml文件)中进行配置,否则获取的ApplicationContext对象将为null。

下面通过实现接口ApplicationContextAware的方式演示如何获取Spring容器中的bean:
首先自定义一个实现了ApplicationContextAware接口的类,实现里面的方法:

package com.ghj.tool;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SpringConfigTool implements ApplicationContextAware {// extends ApplicationObjectSupport{

 private static ApplicationContext ac = null;
 private static SpringConfigTool springConfigTool = null;

 public synchronized static SpringConfigTool init() {
 if (springConfigTool == null) {
  springConfigTool = new SpringConfigTool();
 }
 return springConfigTool;
 }

 public void setApplicationContext(ApplicationContext applicationContext)throws BeansException {
 ac = applicationContext;
 }

 public synchronized static Object getBean(String beanName) {
 return ac.getBean(beanName);
 }
}

其次在applicationContext.xml文件进行配置:

复制代码 代码如下:

<bean id="SpringConfigTool" class="com.ghj.tool.SpringConfigTool"/>

最后通过如下代码就可以获取到Spring容器中相应的bean了:

复制代码 代码如下:

SpringConfigTool.getBean("beanId");

注意一点,在服务器启动Spring容器初始化时,不能通过以下方法获取Spring容器:

import org.springframework.web.context.ContextLoader;
import org.springframework.web.context.WebApplicationContext; 

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, spring
bean
java获取spring bean、spring获取bean的方式、spring boot 获取bean、spring获取bean、获取spring bean对象,以便于您获取更多的相关知识。

时间: 2024-08-31 20:23:24

Java类获取Spring中bean的5种方式_java的相关文章

详解Spring配置事务的五种方式_java

Spring配置文件中关于事务配置总是由三个组成部分,分别是 DataSource .TransactionManager  和 代理机制 这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager. 具

解析Java中如何获取Spring中配置的bean

本篇文章是对在Java中如何获取Spring中配置的bean进行了详细的分析介绍,需要的朋友参考下   一.什么是Spring?Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架 二.如何在程序中获取Spring配置的bean呢?方法一:在初始化时保存ApplicationContext对象代码: 复制代码 代码如下: ApplicationContext ac = new FileSystemXmlApplicationContex("applicationContex

Spring中Bean的命名问题及ref和idref之间的区别

一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查.   Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: <bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean>

spring入门(4) spring中Bean的生命周期总结

Spring中Bean的生命周期,在学习spring的过程中bean的生命周期理解对学习spring有很大的帮助,下面我就分别介绍在 ApplicationContext和BeanFactory中Bean的生命周期. 1.在ApplicationContext中Bean的生命周期 生命周 期执行的过程如下: 1.需找所有的bean根据bean定义的信息来实例化bean 2.使用依赖注入,spring按bean 定义信息配置bean的所有属性 3.若bean实现了BeanNameAware接口,工

【Spring实战】—— 4 Spring中bean的init和destroy方法讲解

本篇文章主要介绍了在spring中通过配置init-method和destroy-method方法来实现Bean的初始化和销毁时附加的操作. 在java中,我们并不需要去管理内存或者变量,而在C或C++中,可以通过new和delete等方式来创建和删除变量或者对象.在Spring中,如果想要对一个bean进行初始化和结束附加一定的操作,则可以使用上述的两个方法来实现. 在介绍这两个方法前,读者需要了解Spring中bean的生命周期,最常使用的两种生命周期是:singleton和prototyp

java类或接口中的泛型到底什么时候该设置他们的类型,什么时候不该?

问题描述 java类或接口中的泛型到底什么时候该设置他们的类型,什么时候不该? 一个类实现了一个接口 (1)首先是正常情况下对接口中泛型的实现 (2)接着是用T和?来模糊的表示接口的泛型 (3)接着把子类的泛型也设置成T,这时候又不报错了 到底什么时候该设置泛型,什么时候又可以用通配符来代替? 解决方案 关键是你的T在派生类中是否具体化 具体化 class IntList extends List<int> 保持泛化 class LinkedList<T> extends List

Java项目中连接数据库的几种方式和范例

连接数据库|项目 Java项目中连接数据库的几种方式和范例 1, 最原始的写法(也是一般初学者的写法) 首先import数据库连接基础类,然后其它的然后就简单了.实际操作过程中只需加载驱动程序类,之后调用sql语句就行了.以下是一个简单的程序例子. //Select.java import java.net.URL; import java.sql.*; class Select{ public static void main(String[] args){ try{ //创建连接URL St

使用JavaScript获取URL中的参数(两种方法)_javascript技巧

本文给大家分享两种方法使用js获取url中的参数,其中方法二是使用的正则表达式方法,大家可以根据需要选择比较好的方法,废话不多说了,直接看详细介绍吧. 方法一: //取url参数 var type = request("type") function request() { var query = location.search; var paras = arguments[0]; if (arguments.length == 2) { query = arguments[1]; }

Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

spring事务配置的五种方式: 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSource.TransactionManager这两部