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

代码获取Spring注解的bean

2014-10-07 21:18 323 查看
方法一 不用配置xml,直接java代码实现

public class GetApplicationContext {

private static class ApplicationContextHolder {
// 单例变量
private static ApplicationContext AC = new FileSystemXmlApplicationContext(
"classpath:applicationContext.xml");
}

// 私有化的构造方法,保证外部的类不能通过构造器来实例化。
private GetApplicationContext() {

}

// 获取单例对象实例
public static ApplicationContext getInstance() {
if (ApplicationContextHolder.AC == null) {
ApplicationContextHolder.AC = new FileSystemXmlApplicationContext(
"classpath:applicationContext.xml");
}
return ApplicationContextHolder.AC;
}
}


获取所有spring自动装配的bean;

<span style="font-size:18px;">//获取spring装配的bean个数
GetApplicationContext.getInstance().getBeanDefinitionNames().length;
//逐个打印出spring自动装配的bean。根据我的测试,类名第一个字母小写即bean的名字
for(int i=0;i<33;i++){
System.out.println( GetApplicationContext.getInstance().getBeanDefinitionNames()[i]);
}</span>


然后通过下面的代码获取到spring注解装配的bean供自己使用

<span style="font-size:18px;">StorageReturnService ossService = (StorageReturnService) GetApplicationContext.getInstance().getBean("storageReturnServiceImpl");</span>


方法二 实现ApplicationContextAware

一定要在spring.xml中加上:

<bean id="SpringContextUtil " class="com.am.oa.commons.service.SpringContextUtil " singleton="true" />

当对SpringContextUtil 实例时就自动设置applicationContext,以便后来可直接用applicationContext

<span style="font-size:18px;">public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;     //Spring应用上下文环境

/**
* 实现ApplicationContextAware接口的回调方法,设置上下文环境
* @param applicationContext
* @throws BeansException
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}

/**
* @return ApplicationContext
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}

/**
* 获取对象
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*/
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}

/**
* 获取类型为requiredType的对象
* 如果bean不能被类型转换,相应的异常将会被抛出(BeanNotOfRequiredTypeException)
* @param name       bean注册名
* @param requiredType 返回对象类型
* @return Object 返回requiredType类型对象
* @throws BeansException
*/
public static Object getBean(String name, Class requiredType) throws BeansException {
return applicationContext.getBean(name, requiredType);
}

/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
* @param name
* @return boolean
*/
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}

/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*/
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
}

/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*/
public static Class getType(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
}

/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*/
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
}
}</span>


action调用:

<span style="font-size:18px;">
public class UserAction extends BaseAction implements Action,ModelDriven{

private Users user = new Users();
//不用再加载springContext.xml文件,因为在web.xml中配置了,在程序中启动是就有了.
UserService userService = (UserService) SpringContextUtil.getBean("userService");

public String execute() throws Exception {
return SUCCESS;
}

public Object getModel() {
return user;
}

public String getAllUser(){
HttpServletRequest request = ServletActionContext.getRequest();
List ls=userService.LoadAllObject( Users.class );
request.setAttribute("user",ls);
this.setUrl("/yonghu.jsp");
return SUCCESS;
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: