怎样自己做一个网站,建设一个网站多钱,芯片商城网站建设,正规手机网站怎么做muy bien过去#xff0c;有关应用程序配置的讨论很多。 我不知道谁拉开了辩论的序幕#xff0c;但是最基础的阅读#xff08;着眼于未来的Java EE 7及更高版本#xff09;是Antonio Goncalves的帖子[辩论] – Java EE 7中的配置又如何呢 #xff1f; 事实是#xff0c;使… muy bien 过去有关应用程序配置的讨论很多。 我不知道谁拉开了辩论的序幕但是最基础的阅读着眼于未来的Java EE 7及更高版本是Antonio Goncalves的帖子[辩论] – Java EE 7中的配置又如何呢 事实是使用Vanilla Java EE我们每天都在进行应用程序配置。 没有适当的机制。 看完昨天亚当的最新帖子后我想对它做些补充我认为它可以适合大多数项目。 为什么发布这个帖子 亚当展示的基本知识非常聪明。 你只是 Inject
int yourConfigVariable; 到此为止。 您不必关心属性或其他配置类。 但是查看它您发现您需要以某种方式从某个地方填充您的配置。 回顾安东尼奥的帖子您会发现您有很多选择。 我们最满意的一种可能是Java的Properties机制。 结合使用此代码和Adam提供的代码您最终将获得Configuration.properties其中包含无数个单词键列表。 那不是我所说的可维护的。 所以基本上这就是为什么该帖子的标题是“将Bien付诸实践” ..oO对不起亚当:-)这是我解决该问题的方法。 从属性文件填充您的配置 最基本的部分是将Configuration.properties文件添加到您的应用程序默认程序包。 现在我们将对配置持有人进行一些修改使其成为属性类型。 现在修改Adam的fetchConfiguration方法以加载它。 private Properties configData;PostConstructpublic void fetchConfiguration() {String fileName Configuration.properties;configData loadPropertiesFromClasspath(fileName);
}/*** Load properties file from classpath with Java 7 :-)* param fileName* return properties*/public static Properties loadPropertiesFromClasspath(String fileName) {try (InputStream in Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName)) {if (in ! null) {props new Properties();props.load(in);}} catch (IOException ioe) {log.debug(Cant load properties., ioe);} 现在您必须相应地修改Producer方法。 我只在这里显示getString方法来向您展示概念 /*** Get a String property* param point* return String*/
Produces
public String getString(InjectionPoint point) {String propertyPath point.getMember().getDeclaringClass().getName() .;String propertyName point.getMember().getName();String propertyValue configData.getProperty(propertyPathpropertyName);return (propertyValue null) ? : propertyValue;} 为了方便起见我将声明类的名称添加为propertyPath以使属性文件中的顺序更加明确。 您可以使用Adam所示的生产方法 package net.eisele.configuration;
public class HitsFlushTimer {Injectprivate String hitsFlushRate;} 在这种情况下您最终使用Configuration.properties文件中的键net.eisele.configuration.HitsFlushTimer.hitsFlushRate访问属性。 快速警告。 如果您遇到这种情况则必须在耳朵内打包单独的ejb和war模块您可能需要在Configuration单例中使用javax.annotation.security.PermitAll注释。 然后您最终会重复很多 可能是真的。 如果重新配置相同的配置例如httpProxy这将强制您为属性文件中的不同键使用相同的值。 解决方案似乎很简单。 为此我们需要自己的资格赛。 我们走吧 Retention(RUNTIME)
Target({FIELD, METHOD})
Qualifier
public interface AppProperty {Nonbindingpublic String value();
} 现在我们有自己的资格赛。 接下来是相应地更改Producer Produces AppProperty()public String getString(InjectionPoint point) {String property point.getAnnotated().getAnnotation(AppProperty.class).value();String valueForFieldName configData.getProperty(property);return (valueForFieldName null) ? : valueForFieldName;
} 而已。 现在您可以在任何地方使用类似的内容 InjectAppProperty(net.eisele.configuration.test2)String test2; 我知道这还不如亚当的Inject注解那么优雅。 但是您不必花很多时间就可以看到正在发生的事情以及您的价值来自何处。 我认为这是一个有多个开发人员的项目中的专业人士。 是的 仍然不是很可维护。 好。 我知道。 您仍在谈论重构属性名称。 对 还剩下什么呢 您可以考虑使用封装了所有属性键的CKey枚举并使用它而不是简单地使用键本身。 但是我宁愿在代码中简单地使用普通的String键。 现在配置愉快。 您如何配置应用程序 让我知道 很高兴收到评论:) 参考在Java软件企业软件开发博客上 配置 JEE合作伙伴 Markus Eisele的Java EE应用程序或“将Bien付诸实践” 。 相关文章 从Spring到Java EE 6 Java EE中的配置管理 Java EE过去现在和云7 Java EE6事件JMS的轻量级替代品 Java EE6装饰器在注入时装饰类 翻译自: https://www.javacodegeeks.com/2011/12/configure-java-ee-applications-or.htmlmuy bien