当前位置: 首页 > 面试题库 >

通过Spring Framework中的注释从resourceBundle获取本地化消息

吕扬
2023-03-14
问题内容

是否有可能做到这一点 ?目前,它是这样完成的:

<bean id="resource" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>content.Language</value> 
        </list>
    </property>
</bean>

@Autowired
protected MessageSource resource;

protected String getMessage(String code, Object[] object, Locale locale) {
    return resource.getMessage(code, object, locale);
}

有没有办法像通过@Value批注获取属性?

<util:properties id="generals" location="classpath:portlet.properties" />

    @Value("#{generals['supported.lang.codes']}")
    public String langCodes;

因为必须调用该方法通常很好,但是例如在进行单元测试时,这很麻烦……在某些情况下,webdriver的PageObject模式中的对象没有初始化,这将非常有帮助


问题答案:

关键是,这仅对单元测试有用。在实际应用程序中,语言环境是无法在注释中进行硬编码的运行时信息。语言环境是根据运行系统中的用户语言环境决定的。

顺便说一句,您可以轻松地自己实现此功能,例如:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface Localize {

    String value();

}

public class CustomAnnotationBeanPostProcessor implements BeanPostProcessor {

    public Object postProcessAfterInitialization(Object bean, String beanName) {
        return bean;
    }

    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        Class clazz = bean.getClass();
        do {
            for (Field field : clazz.getDeclaredFields()) {
                if (field.isAnnotationPresent(Localize.class)) {
                    // get message from ResourceBundle and populate the field with it
                }
            }
            clazz = clazz.getSuperclass();
        } while (clazz != null);
        return bean;
    }


 类似资料:
  • 问题内容: 我试过了 : 它返回了3列“ TABLE_NAME”,“ TABLE_TYPE”和“ COMMENTS”,但是“ TABLE_NAME”列就像“ encrypted”一样,我需要明确的表名: 我使用TABLE_NAME时未“加密”。 问题答案: 由于10g,Oracle在发出DROP TABLE语句时不会立即删除表。相反,它像这样重命名它们并将它们放入回收站。这使我们能够恢复原本不想删

  • 问题内容: 我创建了一个简单的注释类: 我在像这样的一些类中使用它: 我知道我可以遍历声明的字段并获得如下注释: 如何在不迭代类的声明字段的情况下直接通过带注释的名称获取字段? 问题答案: 如果需要进行多次访问,则可以预处理注释。

  • 问题内容: 我有一个名为@Pojo的自定义注释,可用于自动生成Wiki文档: 我这样使用它: 注释资源方法,以便注释处理器可以自动生成描述所需资源和类型的Wiki页面。 我需要在注释处理器中读取该字段的值,但出现运行时错误。 在我的处理器的源代码中,我有以下几行: 但实际的类不适用于处理器。我认为我需要一个替代品来代替实际课程。我不确定该怎么买。 我得到的错误是: 该是我的一个提到的一类注释。 不

  • 我觉得自己很蠢。我希望K8s从本地注册表中拉出Docker图像,以确保我的开发周期尽可能快。 我已经按照说明设置了本地注册表,并且正在使用一个不安全的注册表。我已经向它推送了图像,并通过使用VS代码的Docker扩展查看注册表内部来确认它们位于注册表中: 我真的不知道是使用、还是,所以我都使用了这三种方法。

  • 问题内容: 我创建我的注释 我把它放在测试对象的字段上 现在,我想使用获取所有字段的列表。 但是似乎我的block do操作从未执行过,并且字段没有注释,因为以下代码返回0。 有谁可以帮助我,告诉我我做错了什么? 问题答案: 您需要将注释标记为在运行时可用。将以下内容添加到您的注释代码中。

  • 在我的方面方法中,我需要获取name(自定义注释的参数)的值 由用户调用的方法: