百度百科让做网站的超链接吗,wordpress 中文插件,建设一个网站需要多少钱,中达世联网站建设在享受了几年围绕CDI构建我的代码的乐趣之后#xff0c;使用它根据众所周知的模式来构造我的代码非常自然。 CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制#xff0c;这可能被视为不利。 但是#xff0c;我想证明它可以在Java SE应用程序中使用并且具有巨大… 在享受了几年围绕CDI构建我的代码的乐趣之后使用它根据众所周知的模式来构造我的代码非常自然。 CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制这可能被视为不利。 但是我想证明它可以在Java SE应用程序中使用并且具有巨大的潜力。 CDI的优点在于它不仅仅是注入机制。 除此之外它还提供了一种优雅而强大的事件传递机制。 该功能可以与Swing很好地结合起来以基于MVC模式构建GUI应用程序。 确实有可能有效地将CDI和Swing框架结合起来以快速清晰的结构来构建Java GUI应用程序。 请继续关注以了解如何… 首先称为Weld的CDI的参考实现也作为单独的库分发。 您可以将其添加到您的项目中并开始使用它。 与运行应用程序的标准方式唯一的不同是您需要启动一个Weld容器它很简单 import org.jboss.weld.environment.se.StartMain;
...public static void main(String[] args) { StartMain.main(args);} 要将Weld添加到您的Maven应用程序中只需添加以下依赖项 org.jboss.weld.se : weld-se : 2.2.9.Final 。 要执行您的应用程序代码应将其放入观察ContainerInitialized事件的方法中 public void start(Observes ContainerInitialized startEvent) {// code which would be usually in the main() method
} 在上面的方法中您可以初始化应用程序构建并显示GUI然后等待Swing事件。 从这里开始有趣的部分。 我将使用CDI事件机制使用观察者模式在Swing组件和模型之间实现绑定。 这个想法是在应该进行数据更新时触发自定义事件而不是直接修改数据。 控制器观察触发的事件并根据事件数据执行操作。 然后这些操作将操纵数据模型并将有关数据更新的通知发送到视图。 参见下图 MVC周期从Swing动作侦听器开始该动作侦听器构成一个动作对象并将其作为CDI事件发出。 动作侦听器未绑定到任何控制器代码–控制器已使用CDI机制绑定到事件。 这将GUI代码与业务逻辑完全分离。 以下代码段响应按钮单击事件并发出一个向计数器添加值的操作 ApplicationScoped
class MainFrame extends javax.swing.JFrame {Inject EventChangeValueAction changeValueAction;
...void addButtonActionPerformed(java.awt.event.ActionEvent evt) {changeValueAction.fire(ChangeValueAction.plus(getValue()));}
...
} 在这里我们需要记住CDI事件的观察者将被创建为所有触发事件的新对象以及所有依赖项。 我对MainFrame使用了ApplicationScoped 以确保所有代码都在相同的实例上运行。 这里要提到的一件事为了使CDI工作必须由CDI创建MainFrame的实例而不是直接使用其构造函数。 这是通过将其注入到已经存在的bean中实现的例如观察启动时发出的ContainerInitialized事件的bean。 CDI机制将事件分派给任何侦听器方法该方法侦听此类事件。 我们创建一个控制器应用程序并将代码放入观察者方法中如下所示 public class Application {
...public void updateValueWhenChangeValueAction(Observes final ChangeValueAction action) {... // controller action}
...
} 最后控制器更新模型并在必要时触发视图更新。 如果进一步讲我们可能会触发控制器的更新事件该事件将由视图在本例中为MainFrame组件观察到。 甚至构建模型该模型在更新时会自动触发CDI事件。 因此控制器和视图将完全分离仅响应事件-GUI事件从View到Controller方向流动数据更新事件从Controller / Model到View流动。总而言之CDI事件机制对于构建非常方便一个View与业务逻辑分离的MVC Swing应用程序。 这可以通过在Weld CDI容器中运行应用程序1行代码从Swing侦听器触发动作2行代码并观察动作在任何启用CDI的类上使用单个方法来实现。 这些动作采用一种数据Bean的形式它本身完全不是太多的代码行。 可以在github上找到完整的示例 https : //github.com/OndrejM/JavaDecoupledUI-CDI 翻译自: https://www.javacodegeeks.com/2016/02/cdi-events-swing-application-decouple-ui-event-handling.html