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框架的详细参考文档,版本为1.1.5。这份文档涵盖了Spring框架的核心概念和技术细节,适合于初学者入门以及高级用户深入研究。 #### ...
Spring框架提供了一个`ApplicationContextAware`接口,允许Bean获取当前的ApplicationContext。 ##### 3.12.2 BeanPostProcessor BeanPostProcessor接口允许开发者自定义Bean的初始化逻辑。 ##### 3.12.3 ...
Reference Documentation iii Instantiation using an instance factory method ........................................... 30 4.4. Dependencies ...............................................................
- **了解自身**:通过ApplicationContextAware接口,Bean可以获得对ApplicationContext的引用,从而获取其他Bean的信息。 - **FactoryBean**:这是一种特殊的Bean,它负责创建其他Bean。 #### 3.5 抽象和子Bean定义...
Reference Documentation iii Instantiation using an instance factory method ........................................... 30 4.4. Dependencies ...............................................................
springboot 通过 ApplicationContextAware、ApplicationContext获取spring管理的bean-附件资源
com-spring-ioc-demo:源码主要是学习Spring IOC的原理,以及对Bean的注册及控制,主要运用以下类对Spring进行扩展学习:BeanPostProcessor,BeanFactoryAware,BeanNameAware,ApplicationContextAware,FactoryBean...
1.6.2 ApplicationContextAware和BeanNameAware接口 实现这两个接口可以让Bean感知到Spring容器以及自己的Bean名称。 1.6.3 其他Aware接口 Spring提供了多个Aware接口,如ResourceLoaderAware、...
- **1.6.2 ApplicationContextAware和BeanNameAware** 这些接口允许Bean访问上下文信息或自己的名称。 - **1.6.3 其他Aware接口** Spring还提供了一系列其他Aware接口,可以帮助Bean更好地融入Spring环境。 ##...
通过aware接口,可以对spring相应...首先创建一个类,实现ApplicationContextAware接口 , 该借口需要实现 setApplicationContext方法,该方法的参数由容器传递进来。 这样,bean 就获得了ApplicationContext这个资源
2. **ApplicationContextAware 接口**:让对象能够感知到当前的 ApplicationContext。 Spring.NET 是一个非常强大而灵活的框架,适合各种规模的项目。通过深入学习这些知识点,开发者可以充分利用 Spring.NET 来...
ApplicationContextAware MessageSourceAware ApplicationEventPublisherAware ResourceLoaderAware 多线程 计划任务 cron fixDelay fixRate 条件注解@Conditional 组合注解与元注解 ...
- 创建事件源,实现`ApplicationEvent`和`ApplicationContextAware`。 - 创建监听器,实现`ApplicationListener`。 - 事件源触发事件,通知所有监听器。 9. **IOC(Inversion of Control,控制反转)和DI...
- **1.6.2 ApplicationContextAware与BeanNameAware**: 提供了一些接口让Bean能够知道自身所在的上下文环境和名称。 - **1.6.3 其他Aware接口**: Spring还提供了其他的一些Aware接口,如`EnvironmentAware`等,使得...
- `ApplicationContextAware`接口让Bean能够访问到整个ApplicationContext。 - `BeanNameAware`接口让Bean能够知道自己的名字。 - **其他Aware接口** - Spring还提供了一系列其他Aware接口,用于让Bean获取更多...
4. **ApplicationContextAware接口** - 如果监听器需要访问ApplicationContext,可以实现这个接口,Spring会自动注入ApplicationContext实例。 5. **BeanPostProcessor接口** - 虽然不是标准的监听器,但该接口...
- 将Struts 2的Action与Spring的Bean关联,通常通过实现Spring的ApplicationContextAware接口。 - 使用Spring的JdbcTemplate或Hibernate的Session进行数据库操作。 6. 测试与调试: 在整合完成后,可以通过单元...
- **4.6.2 ApplicationContextAware和BeanNameAware** - 介绍了如何让bean实现这两个接口以获得额外的信息。 - **4.6.3 其它Aware接口** - 介绍了Spring提供的其他Aware接口。 **4.7 Bean定义的继承** - 介绍了...