`

ApplicationContextAware dubbo-Reference to RPC

阅读更多

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;

@Service
@Lazy(false)
public class SpringUtil implements ApplicationContextAware,DisposableBean
{
    public static ApplicationContext applicationContext = null;

    @SuppressWarnings("unchecked")
    public static Object getBean(String beanName){
        isInjected();
        return  applicationContext.getBean(beanName);
    }

    public static <T> T getBean(Class<T> requiredType){
        isInjected();
        return applicationContext.getBean(requiredType);
    }

   
    @Override
    public void destroy() throws Exception {
        System.out.println("springUtils工具类清除注入的applicationContext");
        SpringUtil.applicationContext = null;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        System.out.println("springUtils工具类注入的applicationContext");
        SpringUtil.applicationContext = applicationContext;
    }

    /**
     * 判断是否注入
     * @return
     */
    public static void isInjected(){
        if(SpringUtil.applicationContext == null){
            throw new RuntimeException("springUtils applicationContext is not injected!");
        }
    }
}

 


import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

import com.alibaba.dubbo.common.Constants;
import com.alibaba.dubbo.common.extension.ExtensionLoader;
import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.alibaba.dubbo.common.utils.ConfigUtils;
import com.alibaba.dubbo.container.Container;

/**
 * Main. (API, Static, ThreadSafe)
 *
 * @author william.liangf
 */
public class StartDubboContainer {

    public static final String CONTAINER_KEY = "dubbo.container";

    public static final String SHUTDOWN_HOOK_KEY = "dubbo.shutdown.hook";
   
    private static final Logger logger = LoggerFactory.getLogger(StartDubboContainer.class);

    private static final ExtensionLoader<Container> loader = ExtensionLoader.getExtensionLoader(Container.class);
   
    private static volatile boolean running = true;

    public static void main(String[] args) {
        try {
            if (args == null || args.length == 0) {
                String config = ConfigUtils.getProperty(CONTAINER_KEY, loader.getDefaultExtensionName());
                args = Constants.COMMA_SPLIT_PATTERN.split(config);
            }
           
            final List<Container> containers = new ArrayList<Container>();
            for (int i = 0; i < args.length; i ++) {
                containers.add(loader.getExtension(args[i]));
            }
            logger.info("Use container type(" + Arrays.toString(args) + ") to run dubbo serivce.");
           
            if ("true".equals(System.getProperty(SHUTDOWN_HOOK_KEY))) {
                Runtime.getRuntime().addShutdownHook(new Thread() {
                    public void run() {
                        for (Container container : containers) {
                            try {
                                container.stop();
                                logger.info("Dubbo " + container.getClass().getSimpleName() + " stopped!");
                            } catch (Throwable t) {
                                logger.error(t.getMessage(), t);
                            }
                            synchronized (StartDubboContainer.class) {
                                running = false;
                                StartDubboContainer.class.notify();
                            }
                        }
                    }
                });
            }
           
            for (Container container : containers) {
                container.start();
                logger.info("Dubbo " + container.getClass().getSimpleName() + " started!");
            }
            System.out.println(new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]").format(new Date()) + " Dubbo service server started!");
        } catch (RuntimeException e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
            System.exit(1);
        }
       
    }
   
}

 


import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.iesp.base.api.provider.ICompanyProvider;

@Service("testProvider")
public class TestProvider {
   
   
    //@Reference
    //@Reference(url="dubbo://172.19.5.70:20100")
    @Reference(url="dubbo://172.16.36.68:20100/com.iesp.base.api.provider.ICompanyProvider")
    ICompanyProvider iCompanyService;
   
   
   
    public Object getProvider(){
        return iCompanyService;
    }
}

 


import com.iesp.config.PropertiesFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import javax.sql.DataSource;
import java.util.Properties;


/**
 * @ClassName: SpringDSConfig
 * @Description: 只加载spring加载数据源
 * @author: rongxin
 * @date: 2015年9月30日 下午3:52:05
 */
@Configuration
@ComponentScan({ "com.iesp.base"})
public class SpringRootConfig{

    Properties properties = PropertiesFactory.createProperties("iesp/base","dbConfig");

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(properties.getProperty("jdbc.driverClassName"));
        dataSource.setUrl(properties.getProperty("jdbc.url"));
        dataSource.setUsername(properties.getProperty("jdbc.username"));
        dataSource.setPassword(properties.getProperty("jdbc.password"));
        return dataSource;
    }

    @Bean
    @Autowired
    public DataSourceTransactionManager transactionManager(DataSource dataSource) {
        DataSourceTransactionManager txManager = new org.springframework.jdbc.datasource.DataSourceTransactionManager();
        txManager.setDataSource(dataSource);
        return txManager;
    }
}


public class TestMain {
   
    static{
        String []args={};
        init(args);
    }
   
    private static void init(String[] args){
        System.setProperty("dubbo.spring.javaconfig","com.iesp.base.rest.config");
        String[] startArgs = {"javaconfig"};
        StartDubboContainer.main(startArgs);
    }
   
   
    public static void main(String []args){
        System.out.println("\r\n\r\n****************************************************");
        System.out.println(SpringUtil.getBean(ICompanyConfigRestService.class));   
       
        System.out.println("\r\n\r\n****************************************************");
        System.out.println(SpringUtil.getBean("companyConfigConsumer"));   
       
        System.out.println("\r\n\r\n****************************************************");
       
        TestProvider t=(TestProvider)SpringUtil.getBean("testProvider");
       
        System.out.println("*********local:" + t);
       
        System.out.println("*********provider:"+t.getProvider());
       
        System.out.println("\r\n\r\n****************************************************");
    }
}

 

 

 

分享到:
评论

相关推荐

    spring-reference.pdf

    根据给定的文件信息“spring-reference.pdf”,我们可以了解到该文档是关于Spring框架的详细参考文档,版本为1.1.5。这份文档涵盖了Spring框架的核心概念和技术细节,适合于初学者入门以及高级用户深入研究。 #### ...

    spring-reference

    Spring框架提供了一个`ApplicationContextAware`接口,允许Bean获取当前的ApplicationContext。 ##### 3.12.2 BeanPostProcessor BeanPostProcessor接口允许开发者自定义Bean的初始化逻辑。 ##### 3.12.3 ...

    spring-framework-reference-4.1.2

    Reference Documentation iii Instantiation using an instance factory method ........................................... 30 4.4. Dependencies ...............................................................

    spring-reference1.2.pdf

    - **了解自身**:通过ApplicationContextAware接口,Bean可以获得对ApplicationContext的引用,从而获取其他Bean的信息。 - **FactoryBean**:这是一种特殊的Bean,它负责创建其他Bean。 #### 3.5 抽象和子Bean定义...

    spring-framework-reference4.1.4

    Reference Documentation iii Instantiation using an instance factory method ........................................... 30 4.4. Dependencies ...............................................................

    springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源

    springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean,BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor,ResourceLoaderA

    com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...

    Spring Reference - Core Technologies.pdf

    1.6.2 ApplicationContextAware和BeanNameAware接口 实现这两个接口可以让Bean感知到Spring容器以及自己的Bean名称。 1.6.3 其他Aware接口 Spring提供了多个Aware接口,如ResourceLoaderAware、...

    Spring Reference Core Technologies

    - **1.6.2 ApplicationContextAware和BeanNameAware** 这些接口允许Bean访问上下文信息或自己的名称。 - **1.6.3 其他Aware接口** Spring还提供了一系列其他Aware接口,可以帮助Bean更好地融入Spring环境。 ##...

    spring入门 aware接口实现

    通过aware接口,可以对spring相应...首先创建一个类,实现ApplicationContextAware接口 , 该借口需要实现 setApplicationContext方法,该方法的参数由容器传递进来。 这样,bean 就获得了ApplicationContext这个资源

    spring.net reference

    2. **ApplicationContextAware 接口**:让对象能够感知到当前的 ApplicationContext。 Spring.NET 是一个非常强大而灵活的框架,适合各种规模的项目。通过深入学习这些知识点,开发者可以充分利用 Spring.NET 来...

    springboot学习思维笔记.xmind

    ApplicationContextAware MessageSourceAware ApplicationEventPublisherAware ResourceLoaderAware 多线程 计划任务 cron fixDelay fixRate 条件注解@Conditional 组合注解与元注解 ...

    Spring 应用框架技术面试题.doc

    - 创建事件源,实现`ApplicationEvent`和`ApplicationContextAware`。 - 创建监听器,实现`ApplicationListener`。 - 事件源触发事件,通知所有监听器。 9. **IOC(Inversion of Control,控制反转)和DI...

    spring-core.pdf

    - **1.6.2 ApplicationContextAware与BeanNameAware**: 提供了一些接口让Bean能够知道自身所在的上下文环境和名称。 - **1.6.3 其他Aware接口**: Spring还提供了其他的一些Aware接口,如`EnvironmentAware`等,使得...

    spring core官方文档.pdf

    - `ApplicationContextAware`接口让Bean能够访问到整个ApplicationContext。 - `BeanNameAware`接口让Bean能够知道自己的名字。 - **其他Aware接口** - Spring还提供了一系列其他Aware接口,用于让Bean获取更多...

    spring监听器共20页.pdf.zip

    4. **ApplicationContextAware接口** - 如果监听器需要访问ApplicationContext,可以实现这个接口,Spring会自动注入ApplicationContext实例。 5. **BeanPostProcessor接口** - 虽然不是标准的监听器,但该接口...

    用maven整合struts+spring+hibernate

    - 将Struts 2的Action与Spring的Bean关联,通常通过实现Spring的ApplicationContextAware接口。 - 使用Spring的JdbcTemplate或Hibernate的Session进行数据库操作。 6. 测试与调试: 在整合完成后,可以通过单元...

    spring3.1中文参考文档

    - **4.6.2 ApplicationContextAware和BeanNameAware** - 介绍了如何让bean实现这两个接口以获得额外的信息。 - **4.6.3 其它Aware接口** - 介绍了Spring提供的其他Aware接口。 **4.7 Bean定义的继承** - 介绍了...

Global site tag (gtag.js) - Google Analytics