自定义标签中获取Spring Bean

来源:互联网 发布:同城o2o源码 编辑:程序博客网 时间:2024/04/27 02:08
    public class ServiceTag extends BaseBodyTagSupport {          private String beanName;          private String methodName;          private String id;          public List params = new ArrayList();                    public void setBeanName(String beanName) {              this.beanName = beanName;          }                    public void setMethodName(String methodName) {              this.methodName = methodName;          }                public void setId(String id) {              this.id = id;          }                    public int doEndTag() throws JspException {                   Object bean = null;              Method method = null;                            //取得bean对象              try{                  bean = SpringContextUtil.getBean(beanName);              }catch(Exception ex){                  throw new JspException("get bean error: " + beanName);              }                            //通过反射取得方法              if(bean != null){                  try {                      method = bean.getClass().getMethod(methodName, TagUtil.getParameterTypes(params));                  }catch(Exception e) {                      throw new JspException("get method error: " + beanName + "." + methodName);                  }              }else{                  throw new JspException("ServiceTag Error: bean [" + beanName + "] is null");              }                            //通过反射执行方法,得到结果              Object result = null;              if(method != null){                  try {                      result = method.invoke(bean, TagUtil.getParameterValues(params));                  }catch(Exception e){                      throw new JspException("method invoke error");                  }              }                            //将结果存储在ValueStack中              ValueStack vs = TagUtils.getStack(pageContext);              vs.getContext().put(id, result);                            return EVAL_PAGE;          }      }  




package org.search.api.util;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;/** * 获取spring容器,以访问容器中定义的其他bean *  * <pre> * 一定要在spring.xml中加上:  * <bean id='SpringContextUtil ' class='org.search.api.util.SpringContextUtil' singleton='true'/> * 当对SpringContextUtil 实例时就自动设置applicationContext,以便后来可直接用applicationContext * </pre> *  * @author Administrator *  */public class SpringContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextUtil.applicationContext = applicationContext;}public static ApplicationContext getApplicationContext() {return applicationContext;}public static Object getBean(String name) throws BeansException {return applicationContext.getBean(name);}}


0 0
原创粉丝点击