我想使用存储在DB中的消息

时间:2015-09-21 14:59:52

标签: spring spring-mvc

我想使用存储在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;
    }
}

3 个答案:

答案 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));