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方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)