spring注入bean进入工具类的静态方法
2017-12-13 11:30
381 查看
package com.caiwufei.common.db; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; import com.caiwufei.common.db.mongo.MongoDynamicTemplateSource; @Component public class DBContextHolder{ @Autowired private MongoDynamicTemplateSource dynamicTemplateSource; private static DBContextHolder dbContextHolder; private static final ThreadLocal<String> dbName = new ThreadLocal<String>(); private static final ThreadLocal<String> mongoTemplate = new ThreadLocal<String>(); @PostConstruct public void init() { dbContextHolder = this; dbContextHolder.dynamicTemplateSource = this.dynamicTemplateSource; } public void setMongoTemplateSource(MongoDynamicTemplateSource mongoTemplateSource) { this.dynamicTemplateSource = mongoTemplateSource; } public static class DB { public static void changeTargetDataSource(String dataKey){ dbName.set(dataKey); } public static String getTargetDataSource(){ return dbName.get(); } } public static class Mongo { public static void changeTargetMongoTemplate(String mongoTemplateKey){ mongoTemplate.set(mongoTemplateKey); } public static String getTargetMongoTemplate(){ return mongoTemplate.get(); } } public static MongoTemplate mongoTemplate() { return dbContextHolder.dynamicTemplateSource.getMongoTemplate(); } }
看上面的代码,工具类DBContextHolder中注入了private MongoDynamicTemplateSource dynamicTemplateSource动态的mongodb模板。
通过设计这个工具类,既是spring中的一个bean,又是一个工具类,静态方法可以直接DBContextHolder.Mongo.getTargetMongoTemplate();这样使用。
模板大致如下:
class O{ @Autowired private D d; private static O o; @PostConstruct public void init() { o = this; o.d = this.d; } public void setD(D dd) { this.d = dd; } }
相关文章推荐
- spring 在静态工具类中使用注解注入bean
- spring 在静态工具类中使用注解注入bean
- Spring 在静态工具类中使用注解注入bean
- Spring 无法注入静态变量,直接在静态方法中获取bean
- spring项目中静态方法中使用注入的bean
- 使用Spring注解,在静态方法中注入bean
- 在工具类静态方法调用@Autowired注入的bean方法
- spring注入时bean的set方法为什么不能是static类型的?(为什么要用单例模式而不是静态方法)
- Spring使用静态工厂方法创建Bean
- Spring入门学习——调用静态工厂方法创建Bean
- spring 初始化时注入bean实现listener的方法
- Spring中注入Bean的方法
- spring 配置bean的方法及依赖注入发方式
- Spring-装配Bean的3种方式-工厂静态方法方式配置Bean
- SpringMVC静态方法中如何注入service非静态方法,如何在contextInitialized之前注入bean,使service不会报空
- Spring注入service为null另类解决办法 工具类 一般类 静态 非controller
- spring中使用@RequestBody,对应的bean中属性名大写注入为空的解决方法
- Spring 4.2 方法注入解决单例Bean的原型Bean依赖问题
- spring注入时bean的set方法为什么不能是static类型的?
- Spring注入service为null另类解决办法 工具类 一般类 静态 非controller