您的位置:首页 > 编程语言 > Java开发

自定义标签中获取Spring Bean

2014-04-14 15:47 239 查看
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;

@Override
public 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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: