Spring从容器中获取bean对象可以分别通过什么接口

Spring从容器中获取bean对象可以分别通过什么接口,第1张

方法一:在初始化时保存ApplicationContext对象

new ClassPathXmlApplicationContext("applicationContextxml")getBean("beanId");

这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的配置信息。

方法二:通过Spring提供的工具类获取ApplicationContext对象

import orgspringframeworkwebcontextsupportWebApplicationContextUtils;

ApplicationContext ac1 =

方法三:继承自抽象类ApplicationObjectSupport

抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的

方法四:继承自抽象类WebApplicationObjectSupport

类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

方法五:实现接口ApplicationContextAware

实际上就于Spring框架紧密耦合在一起了,因为这些类是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运行环境。

只要搜一下“获取 spring bean”,获取spring bean的N中方法都出来了。线程中获取和普通类中获取方法是一样的。

下面是一种方法。这个类需要配置在Spring中。

使用的时候直接:Bean bean = SpringUtilgetBean("bean的id", Beanclass);//Beanclass是bean的类对象,比如获取 UserService的bean

在配置文件中加入:

Xml代码

<!-- 用于持有ApplicationContext,可以使用SpringContextHoldergetBean('xxxx')的静态方法得到spring bean对象 -->

<bean class="comxxxxxSpringContextHolder" lazy-init="false" />

Java代码

import orgspringframeworkcontextApplicationContext;

import orgspringframeworkcontextApplicationContextAware;

/

以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext

/

public class SpringContextHolder implements ApplicationContextAware {

private static ApplicationContext applicationContext;

/

实现ApplicationContextAware接口的context注入函数, 将其存入静态变量

/

public void setApplicationContext(ApplicationContext applicationContext) {

SpringContextHolderapplicationContext = applicationContext; // NOSONAR

}

/

取得存储在静态变量中的ApplicationContext

/

public static ApplicationContext getApplicationContext() {

checkApplicationContext();

return applicationContext;

}

/

从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型

/

@SuppressWarnings("unchecked")

public static <T> T getBean(String name) {

checkApplicationContext();

return (T) applicationContextgetBean(name);

}

/

从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型

/

@SuppressWarnings("unchecked")

public static <T> T getBean(Class<T> clazz) {

checkApplicationContext();

return (T) applicationContextgetBeansOfType(clazz);

}

/

清除applicationContext静态变量

/

public static void cleanApplicationContext() {

applicationContext = null;

}

private static void checkApplicationContext() {

if (applicationContext == null) {

throw new IllegalStateException("applicaitonContext未注入,请在applicationContextxml中定义SpringContextHolder");

}

}

}

1添加spring获取上下文和bean方法的工具类(ApplicationContextUtil)

    @Component

    public class ApplicationContextUtil implements ApplicationContext{

        private static ApplicationContext context;

        @Override

        public void setApplicationContext(ApplicationContext context){

            ApplicationContextUtilcontext = context;

        }

        public static ApplicationContext getContext(){

            return context;

        }

    }

2在静态方法类中通过工具类获取bean内容(获取的为bean内容,也可以实例化对象,但是获取不到bean内容)

    Object obj = (Objectclass)ApplicationContextUtilgetContext()getBean("bean的名字");

以上就是关于Spring从容器中获取bean对象可以分别通过什么接口全部的内容,包括:Spring从容器中获取bean对象可以分别通过什么接口、如何在线程中获取spring 管理的bean、如何取得Spring管理的bean等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9706191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存