spring获取bean的几种方式有哪些?如何实现?

TheDisguiser 2020-04-27 20:57:19 java常见问答 6031

在spring中,获取bean有时候会有一定的麻烦,今天小编就和大家分享一下spring中获取bean的几种方式,一起来了解一下吧。

一、实现一个接口ApplicationContextAware,这种方式较为快捷,比较推荐

/**
 * Spring ApplicationContext 工具类
 */
@SuppressWarnings("unchecked")
@Component
public class SpringUtils implements ApplicationContextAware
{
    private static ApplicationContext applicationContext;
    public void setApplicationContext(ApplicationContext applicationContext)
    throws BeansException
    {
        SpringUtils.applicationContext = applicationContext;
    }
    public static T getBean(String beanName)
    {
        if (applicationContext.containsBean(beanName))
        {
            return (T) applicationContext.getBean(beanName);
        }
        else
        {
            return null;
        }
    }
    public static MapgetBeansOfType(Class baseType)
    {
        return applicationContext.getBeansOfType(baseType);
    }
}

二、继承抽象类ApplicationObjectSupport,这个方法旨在调用父类的getApplicationContext()方法,来获取Spring容器对象。

@Service
public class SpringContextHelper2 extends ApplicationObjectSupport
{
    //提供一个接口,获取容器中的Bean实例,根据名称获取
    public Object getBean(String beanName)
    {
        return getApplicationContext()
            .getBean(beanName);
    }
}

三、通过读取XML文件反射生成对象,适用于Spring独立应用程序,必须要程序通过配置文件初始化Spring才能应用。

ApplicationContext ac = new
FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("userService");
例: 在application.xml中配置:

四、通过Spring提供的工具类获取ApplicationContext对象

ApplicationContext ac1 =
    WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 =
    WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");

注:这种方式适用于Spring的B/S系统,通过ServletContext对象获取ApplicationContext对象。然后再通过它获取须要的类实例。

以上就是spring中获取bean的所有内容了,想知道关于Java架构师的更多内容,请一直关注我们的网站吧。