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);
    	}
    
    }
    

      

  • 相关阅读:
    Two Sum
    Binary Tree Preorder Traversal *
    Rotate Array
    Repeated DNA Sequences
    Symmetric Tree
    Path Sum
    Python初学——多线程Threading
    Python初学——窗口视窗Tkinter
    pyinstaller打包多个py文件和去除cmd黑框
    python获取当前路径
  • 原文地址:https://www.cnblogs.com/fengzhentian/p/4554763.html
Copyright © 2011-2022 走看看