zoukankan      html  css  js  c++  java
  • (转)Spring实例化

    标签:SpringContextUtil,getBean

    手动获取Bean

    方法一  不用配置xml,直接java代码实现 

    /**
     * 工厂模式选择Bean类
     */
    public class MyBeanFactory {
    	
    	public IDataSend getBean(String className) {
    		try {
                ApplicationContext ac = new ClassPathXmlApplicationContext(
    					new String[]{"spring.xml", "spring-mybatis.xml"});
    			return (IDataSend) ac.getBean(className);            
                } catch (Exception e) {
    			return null;
    		}
    	}
    }
    

    方法二 实现ApplicationContextAware

    在spring.xml中加上:

    <bean id="SpringContextUtil" class="com.XXX.utils.SpringContextUtil" />

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

    /**
     * 获取spring容器,以访问容器中定义的其他bean
     */
    public class SpringContextUtil implements ApplicationContextAware {
    
    	// Spring应用上下文环境
    	private static ApplicationContext applicationContext;
    
    	/**
    	 * 实现ApplicationContextAware接口的回调方法,设置上下文环境
    	 * 
    	 * @param applicationContext
    	 */
    	public void setApplicationContext(ApplicationContext applicationContext)
    			throws BeansException {
    		SpringContextUtil.applicationContext = applicationContext;
    	}
    
    	/**
    	 * @return ApplicationContext
    	 */
    	public static ApplicationContext getApplicationContext() {
    
    		return applicationContext;
    	}
    
    	/**
    	 * 获取对象 这里重写了bean方法,起主要作用
    	 * 
    	 * @param name
    	 * @return Object 一个以所给名字注册的bean的实例
    	 * @throws BeansException
    	 */
    	public static Object getBean(String name) throws BeansException {
    		return getApplicationContext().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);
    	}
    
    }
    

      

  • 相关阅读:
    memcached启动参数
    Shell 获取当前执行脚本的路径
    linux 下 openssl 编译和交叉编译
    网站更换域名
    linux访问windows共享文件夹
    linux下安装NPM管理工具
    快速构建C++项目工具Scons,结合Editplus搭建开发环境
    C++ Config 配置文件类
    iOS代码Button Demo
    (转)iOS面试题目
  • 原文地址:https://www.cnblogs.com/fengzhentian/p/4554763.html
Copyright © 2011-2022 走看看