我想使用存储在DB中的消息而不是属性文件。
我有一个StandardMessageResolver
的实现类,在这个类mongoOperation
中没有自动装配。
我试图自动装配applicationContext
但它没有自动装配....
我觉得在创建应用程序上下文或范围设置之前运行此过程是错误的。
你有什么好主意可以解决这个问题吗?
public class MyMessageResolver extends StandardMessageResolver implements MessageSource{
private MessageSource messageSource;
@Autowired
protected MongoOperations mongoOperation;
}
参考文章: http://forum.spring.io/forum/spring-projects/container/22141-i18n-and-the-database
更新:我的配置:
@Configuration
@EnableMongoRepositories("demo.mongo.model")
public class SpringMongoConfig extends AbstractMongoConfiguration {
@Value("${spring.profiles.active}")
private String profileActive;
@Value("${spring.application.name}")
private String proAppName;
@Value("${spring.data.mongodb.host}")
private String mongoHost;
@Value("${spring.data.mongodb.port}")
private String mongoPort;
@Value("${spring.data.mongodb.database}")
private String mongoDB;
private String mongoHost2;
@Override
public MongoMappingContext mongoMappingContext()
throws ClassNotFoundException {
// TODO Auto-generated method stub
return super.mongoMappingContext();
}
@Override
@Bean
public Mongo mongo() throws Exception {
System.out.println("start " + profileActive + "environment, " + proAppName + "started");
System.out.println("mongo host: "+ mongoHost);
System.out.println("mongo db: "+ mongoDB);
return new MongoClient(mongoHost + ":" + mongoPort);
}
@Override
protected String getDatabaseName() {
// TODO Auto-generated method stub
return mongoDB;
}
@Bean
public MongoTemplate mongoTemplate(){
try {
return new MongoTemplate(mongo(), this.getDatabaseName());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
答案 0 :(得分:1)
如果你想在MongoOperations
中自动装配MyMessageResolver
,你需要它们都是春豆。为了实现这一点,只需在ApplicationContext中声明它们(使用XML,JavaConfig或带注释的组件扫描)
答案 1 :(得分:1)
我不确定你的spring配置是什么,但是为了将任何bean自动装配到类中,该类也应该是bean层次结构的一部分。
换句话说,MyMessageResolver
应使用以下任何注释进行修饰。
1) @Controller
2) @Service
3) @Component
4) @Repository
参考:http://www.mkyong.com/spring/spring-auto-scanning-components/
答案 2 :(得分:0)
我终于发现在我的代码中启用spring提供的@annotations,有必要通过ApplicationContext.getBean实例化。新类创建类是不行的......
//templateEngine.setMessageResolver((IMessageResolver) new MyMessageResolver(context));
templateEngine.setMessageResolver((IMessageResolver) context.getBean(MyMessageResolver.class));