如何通过类名取spring bean

如何通过类名取spring bean,第1张

package comloonewfweb;  

  

import orgspringframeworkbeansBeansException;  

import orgspringframeworkbeansfactoryNoSuchBeanDefinitionException;  

import orgspringframeworkcontextApplicationContext;  

import orgspringframeworkcontextApplicationContextAware;  

  

  Spring ApplicationContext 获取spring容器中的实例bean 

  @author ruilinxie 

  

 /  

public class WebContextFactoryUtil implements ApplicationContextAware  

{  

    / 

      Spring 应用上下文环境 

     /  

    private static ApplicationContext applicationContext;  

  

    / 

      实现ApplicationContextAware接口的回调方法,设置上下文环境 

       

      @param applicationContext 

      @throws BeansException 

     /  

    @SuppressWarnings("static-access")  

    public void setApplicationContext(ApplicationContext applicationContext)  

            throws BeansException  

    {  

        thisapplicationContext = applicationContext;  

    }  

  

    / 

      @return ApplicationContext 

     /  

    public static ApplicationContext getApplicationContext()  

    {  

        return applicationContext;  

    }  

  

    / 

      获取对象 

       

      @param name 

      @return Object bean的实例 

      @throws BeansException 

     /  

    public static Object getBean(String beanName) throws BeansException  

    {  

        if (!WebContextFactoryUtilcontainsBean(beanName))  

        {  

            return null;  

        } else  

        {  

            return applicationContextgetBean(beanName);  

        }  

    }  

  

    / 

      获取类型为requiredType的对象 

      如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException) 

       

      @param name 

                 bean注册名 

      @param requiredType 

                 返回对象类型 

      @return Object 返回requiredType类型对象 

      @throws BeansException 

     /  

    @SuppressWarnings({ "unchecked", "rawtypes" })  

    public static Object getBean(String name, Class requiredType)  

            throws BeansException  

    {  

        return applicationContextgetBean(name, requiredType);  

    }  

  

    / 

      如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true 

       

      @param name 

      @return boolean 

     /  

    public static boolean containsBean(String name)  

    {  

        return applicationContextcontainsBean(name);  

    }  

  

    / 

      判断以给定名字注册的bean定义是一个singleton还是一个prototype。 

      如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) 

       

      @param name 

      @return boolean 

      @throws NoSuchBeanDefinitionException 

     /  

    public static boolean isSingleton(String name)  

            throws NoSuchBeanDefinitionException  

    {  

        return applicationContextisSingleton(name);  

    }  

  

    / 

      @param name 

      @return Class 注册对象的类型 

      @throws NoSuchBeanDefinitionException 

     /  

    @SuppressWarnings("rawtypes")  

    public static Class getType(String name)  

            throws NoSuchBeanDefinitionException  

    {  

        return applicationContextgetType(name);  

    }  

  

    / 

      如果给定的bean名字在bean定义中有别名,则返回这些别名 

       

      @param name 

      @return 

      @throws NoSuchBeanDefinitionException 

     /  

    public static String[] getAliases(String name)  

            throws NoSuchBeanDefinitionException  

    {  

        return applicationContextgetAliases(name);  

    }  

  

}

1jsp页面如果想要根据id直接查询信息的话,可能会需要这样的代码

2而应用类Spring框架之后如上图的NewsService里面是没有实例化过的NewsDao的,这样上面图中的方法就执行不了

3那假如想要使用NewsServcie中的方法,就需要去找Spring,在Action因为设置了setter方法注入所以可以直接获得实例化好的对象,那在jsp中呢?

4首先你需要有一个jar包,形如spring-web-320M2jar,将此包加入build Path并部署或者直接复制到WEB-INF/lib下,这是spring应用在web项目时需要用到的jar包

然后在jsp页面中导入相关的工具类:

<%@ page import="orgspringframeworkwebcontextsupportWebApplicationContextUtils"%><%@ page import="orgspringframeworkwebcontextWebApplicationContext"%>

5最后通过以下语句获取配置文件中相应的Bean

WebApplicationContext wac = WebApplicationContextUtilsgetRequiredWebApplicationContext(thisgetServletContext()); NewsService service = (NewsService)wacgetBean("newsService");

注意getBean()方法中传入的是配置文件中的Bean的id

这样就可以在页面中访问Spring的Bean了,同时也可以访问service的方法了

getBean是用来获取applicationContextxml文件里bean的,()写的是bean的id。

一种是singleton,一种是prototype,默认的是singleton,这种定义的bean实例的作用是与spring的容器一致的,只有spring容器初始化,调用getBean得到的singleton实例始终是同一个bean的实例spring定义的bean有两种作用范围,是每当调用getBean得到实例的时候spring都会new一个实例来给你,而prototype的实例。

以上就是关于如何通过类名取spring bean全部的内容,包括:如何通过类名取spring bean、如何调用spring配置文件手动注入的bean、关于spring的getBean方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/9581276.html

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

发表评论

登录后才能评论

评论列表(0条)

保存