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****************************************************");
}
}
相关推荐
Reference Documentation iii Instantiation using an instance factory method ........................................... 30 4.4. Dependencies ...............................................................
Reference Documentation iii Instantiation using an instance factory method ........................................... 30 4.4. Dependencies ...............................................................
springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源
4.6.2 ApplicationContextAware 和BeanNameAware . 75 4.6.3 其它Aware 接口 75 4.7 Bean 定义的继承. 77 4.8 容器扩展点. 78 4.8.1 使用BeanPostProcessor 来自定义bean 78 4.8.1.1 示例:...
com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...
通过aware接口,可以对spring相应...首先创建一个类,实现ApplicationContextAware接口 , 该借口需要实现 setApplicationContext方法,该方法的参数由容器传递进来。 这样,bean 就获得了ApplicationContext这个资源
ApplicationContextAware MessageSourceAware ApplicationEventPublisherAware ResourceLoaderAware 多线程 计划任务 cron fixDelay fixRate 条件注解@Conditional 组合注解与元注解 ...
统一建模语言(UML)是一个通用的可视化建模语言,用于对软件进行描述、可视化处理、构造和建立软件系统制品的文档。它记录了对必须构造的系统的决定和理解,可用于对系统的理解、设计、浏览、配置、维护和信息控制...
Spring boot 基础 1 1.什么是spring boot 1 2.spring boot的优点 2 3.环境搭建 3 3.1 添加依赖 3 ...11.8 ApplicationContextAware接口 28 11.9 过滤器\监听器\拦截器 29 12. 注解 31 13 . 延伸 32
使用了ApplicationContextAware接口,获取spring管理的bean; 多项目整合夸spring容器获取bean的实现方式。
ApplicationContextAware当前的applicationContext,这也可以调用容器的服务 4. Bean的自动装配 byName根据属性名称自动装配-set注入 byType在容器中查找指定属性类型进行装配-set注入 构造函数与byType类似-构造...
需要实现ApplicationContextAware 事件源【传递消息】MessageEvent 需要继承ApplicationEvent 监听器【处理事件】MessageEventListener 需要实现ApplicationListener<事件源> 异步 需要监听器方法加@Async 主类@...
介绍了Java获取Bean容器的几种常见调用方式,其中详细写出了如何实现ApplicationContextAware 接口来获取Bean容器的工具类
1.继承ApplicationContextAware 2.代码如下 3.记得要把这个工具类加入到Spring的扫描路径下,这样才能在初始化时注入 4.使用方法
(5)如果Bean实现了ApplicationContextAware接口,则Spring调用setApplicationContext()方法传入当前ApplicationContext实例的引用。 (6)如果BeanPostProcessor和Bean关联,则Spring将调用该接口的预初始化方法...
主要介绍了Spring注解@Resource和@Autowired区别对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
public class LoginAction implements ApplicationContextAware { private ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) throws ...
自定义标签中@Autowired的属性为null 解决办法:两步 1.新建一个类SpringContext,实现接口ApplicationContextAware; 2.spring.xml中添加 3.使用SpingContext.getBean("bean名");获取
为何@Autowired可以注入ApplicationContext, 一般来说,我们可以通过实现ApplicationContextAware接口来获取ApplicationContext的引用。但是根据官方文档,发现也可以通过 @Autowired来注入ApplicationContext,这...