|  | @ -0,0 +1,132 @@
 | 
												
													
														
															|  | 
 |  | package com.yihu.jw.util.spring;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import org.springframework.beans.BeansException;
 | 
												
													
														
															|  | 
 |  | import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
 | 
												
													
														
															|  | 
 |  | import org.springframework.context.ApplicationContext;
 | 
												
													
														
															|  | 
 |  | import org.springframework.context.ApplicationContextAware;
 | 
												
													
														
															|  | 
 |  | import org.springframework.stereotype.Component;
 | 
												
													
														
															|  | 
 |  | import org.springframework.util.ClassUtils;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | /**
 | 
												
													
														
															|  | 
 |  |  * Spring上下文管理器。
 | 
												
													
														
															|  | 
 |  |  *
 | 
												
													
														
															|  | 
 |  |  * @author Sand
 | 
												
													
														
															|  | 
 |  |  * @version 1.0
 | 
												
													
														
															|  | 
 |  |  * @created 12-05-2015 17:47:55
 | 
												
													
														
															|  | 
 |  |  */
 | 
												
													
														
															|  | 
 |  | @Component
 | 
												
													
														
															|  | 
 |  | public class SpringContext implements ApplicationContextAware {
 | 
												
													
														
															|  | 
 |  |     private static ApplicationContext springContext = null;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 获取Spring应用上下文环境。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static ApplicationContext getApplicationContext() {
 | 
												
													
														
															|  | 
 |  |         return springContext;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     @Override
 | 
												
													
														
															|  | 
 |  |     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
 | 
												
													
														
															|  | 
 |  |         springContext = applicationContext;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 获取服务。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param serviceName
 | 
												
													
														
															|  | 
 |  |      * @param <T>
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static <T> T getService(String serviceName) {
 | 
												
													
														
															|  | 
 |  |         return (T) springContext.getBean(serviceName);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     public static <T> T getService(Class<T> beanCls) {
 | 
												
													
														
															|  | 
 |  |         return (T) springContext.getBean(beanCls);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 获取服务,并用参数初始化对象。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param serviceName
 | 
												
													
														
															|  | 
 |  |      * @param args
 | 
												
													
														
															|  | 
 |  |      * @param <T>
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static <T> T getService(String serviceName, Object... args) {
 | 
												
													
														
															|  | 
 |  |         T ref = (T)springContext.getBean(serviceName, args);
 | 
												
													
														
															|  | 
 |  |         if (ref == null) return null;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return ref;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     public static <T> T getService(Class<T> beanCls, Object... args){
 | 
												
													
														
															|  | 
 |  |         T ref = (T)springContext.getBean(beanCls, args);
 | 
												
													
														
															|  | 
 |  |         if (ref == null) return null;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return ref;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 获取平台支持的所有服务名称。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static String[] getAvailableServiceNames() {
 | 
												
													
														
															|  | 
 |  |         String[] serviceNames = springContext.getBeanDefinitionNames();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return serviceNames;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 判断是否支持特定服务。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param serviceName
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static boolean isServiceSupported(String serviceName) {
 | 
												
													
														
															|  | 
 |  |         return springContext.containsBeanDefinition(serviceName);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 获取服务的实现类。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param serviceName
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static Class getServiceType(String serviceName) {
 | 
												
													
														
															|  | 
 |  |         return springContext.getType(serviceName);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 判断服务是否为单例模式。
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param serviceName
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static boolean isSingleton(String serviceName) {
 | 
												
													
														
															|  | 
 |  |         return springContext.isSingleton(serviceName);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 手动装配Bean
 | 
												
													
														
															|  | 
 |  |      * @param bean
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static void autowiredBean(Object bean) {
 | 
												
													
														
															|  | 
 |  |         autowiredBean(bean, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 指定模式,手动装配Bean
 | 
												
													
														
															|  | 
 |  |      * @param bean
 | 
												
													
														
															|  | 
 |  |      * @param autowireMode
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public static void autowiredBean(Object bean, int autowireMode) {
 | 
												
													
														
															|  | 
 |  |         String beanName = ClassUtils.getUserClass(bean).getName();
 | 
												
													
														
															|  | 
 |  |         AutowireCapableBeanFactory factory = springContext.getAutowireCapableBeanFactory();
 | 
												
													
														
															|  | 
 |  |         factory.autowireBeanProperties(bean, autowireMode, false);
 | 
												
													
														
															|  | 
 |  |         factory.initializeBean(bean, beanName);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | }
 |