Guice整合Struts2简易教程

 

1. 简介

  Guice是Google推出的一款DI框架,因其优秀荣获了Jolt大奖。和Spring相比,要轻量很多。运行时只要指定一个配置类,实现其com.google.inject.Module接口,指定接口和实现类即可。

  需要的基础jar包有

  Guice需要的jar包,如果是web应用,需要guice-servlet-2.0.jar,整合Struts2则需要guice-struts2-plugin-2.0.jar

  aopalliance.jar

  guice-2.0.jar

  guice-servlet-2.0.jar

  guice-struts2-plugin-2.0.jar

Struts2需要的jar包

  commons-fileupload-1.2.1.jar

  commons-io-1.3.2.jar

  commons-logging-1.0.4.jar

  freemarker-2.3.13.jar

  ognl-2.6.11.jar

  struts2-core-2.1.6.jar

  xwork-2.1.2.jar

 

 

GuiceSpring的对比

 

Spring

Guice

使用XML

使用将类与类之间的关系隔离到xml中,由容器负责注入被调用的对象,因此叫做依赖注入

不使用xml,将类与类之间的关系隔离到Module中,声名何处需要注入,由容器根据Module里的描述,注入被调用的对象。

使用Annotation

 

使用
支持自定义Annotation标注,对于相同的接口定义的对象引用,为它们标注上不同的自定义Annotation注释,就可以达到同一个类里边的同一个接口的引用,注射给不同的实现,在Module里用标注做区分,灵活性大大增加。
使用Annotation也未必是好事,范型等新特性也未必是好事,目前大多的服务器均不支持jdk1.5,wls9以前才支持,而目前的客户由于价格原因也很少选用wls9的,至少我们做过的项目中都没有。功能再强,客户不需要,何用?

运行效率

装载spring配置文件时,需解析xml,效率低,getBean效率也不高,不过使用环境不会涉及到getBean,只有生产环境的时候会用到getBean,在装载spring应用程序的时候,已经完成全部的注射,所以这个低效率的问题不是问题。

使用Annotationcglib, 效率高与spring最明显的一个区别,spring是在装载spring配置文件的时候把该注入的地方都注入完,而Guice呢,则是在使用的时候去注射,运行效率和灵活性高。

类耦合度

耦合度低,强调类非侵入,以外部化的方式处理依赖关系,类里边是很干净的,在配置文件里做文章,对类的依赖性极低。

高,代码级的标注,DI标记@inject侵入代码中,耦合到了类层面上来,何止侵入,简直侵略,代码耦合了过多guice的东西,大大背离了依赖注入的初衷,对于代码的可维护性,可读性均不利

类编写时

需要编写xml,配置Bean,配置注入

只需声明为@inject,等着被注入,
最后在统一的Module里声明注入方式

仅支持IOC

否,spring目前已经涉猎很多部分

是,目前仅仅是个DI容器

是否易于代码重构

统一的xml配置入口,更改容易

配置工作是在Module里进行,和spring异曲同功

支持多种注入方式

构造器,setter方法

Field,构造器,setter方法

灵活性

 

1,如果同一个接口定义的引用需要注入不同的实现,就要编写不同的Module,烦琐

2,动态注入

如果你想注射的一个实现,你还未知呢,怎么办呢,spring是没办法,事先在配置文件里写死的,而Guice就可以做到,就是说我想注射的这个对象我还不知道注射给谁呢,是在运行时才能得到的的这个接口的实现,所以这就大大提高了依赖注射的灵活性,动态注射。

与现有框架集成度

1 高,众多现有优秀的框架(如struts1.x等)均提供了spring的集成入口,而且spring已经不仅仅是依赖注入,包括众多方面。
2
 Spring也提供了对Hibernate等的集成,可大大简化开发难度。
3
 提供对于orm,rmi,webservice等等接口众多,体系庞大。

1,可以与现有框架集成,不过仅仅依靠一个效率稍高的DI,就想取代spring的地位,有点难度。

配置复杂度

xml中定位类与类之间的关系,难度低

代码级定位类与类之间的关系,难度稍高

 

2. Helloworld

  笔者写了一个demo,对于简单的应用Guice还是比Spring方便很多

  └─com

  └─greysh

  └─guice

  ├─action

  │ UserAction.java

  │

  ├─config

  │ ModuleConfig.java

  │

  ├─model

  │ User.java

  │

  └─service

  │ UserService.java

  │

  └─impl

  UserServiceImpl.java

Guie加载的原理是先去调用自己实现Module接口的类,这个类类似Spring的applicationcontext.然后调用configure函数的binder进行绑定,相当于spring里面的ref绑定,然后绑定完后就在需要注入的放指定 @Inject 进行注入,主要有构造函数注入,方法注入,字段注入。一般而言用方法注入

  本教程的User为实体类,仅仅有一个字段userName

public interface UserService {

  void invoke(User user);

  }

  对于接口实现  

public void invoke(User user) {

  user.setUserName(\"Name : \" + user.getUserName());

  当然最重要的是action  

@Inject
private UserService userService;
@Inject
private User user;

  本教程采用字段注入,由于不采用Struts2的自身的DI,因此要指定为guice

<constant name=\"struts.objecsFactory\" value=\"guice\" />
<constant name=\"struts.i18n.encoding\" value=\"utf8\" />
<constant name=\"guice.module\" value=\"com.greysh.guice.config.ModuleConfig\" />
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 无锡平芯微半导体科技有限公司生产的A1SHB三极管(全称PW2301A)是一款P沟道增强型MOSFET,具备低内阻、高重复雪崩耐受能力以及高效电源切换设计等优势。其技术规格如下:最大漏源电压(VDS)为-20V,最大连续漏极电流(ID)为-3A,可在此条件下稳定工作;栅源电压(VGS)最大值为±12V,能承受正反向电压;脉冲漏极电流(IDM)可达-10A,适合处理短暂高电流脉冲;最大功率耗散(PD)为1W,可防止器件过热。A1SHB采用3引脚SOT23-3封装,小型化设计利于空间受限的应用场景。热特性方面,结到环境的热阻(RθJA)为125℃/W,即每增加1W功率损耗,结温上升125℃,提示设计电路时需考虑散热。 A1SHB的电气性能出色,开关特性优异。开关测试电路及波形图(图1、图2)展示了不同条件下的开关性能,括开关上升时间(tr)、下降时间(tf)、开启时间(ton)和关闭时间(toff),这些参数对评估MOSFET在高频开关应用中的效率至关重要。图4呈现了漏极电流(ID)与漏源电压(VDS)的关系,图5描绘了输出特性曲线,反映不同栅源电压下漏极电流的变化。图6至图10进一步揭示性能特征:转移特性(图7)显示栅极电压(Vgs)对漏极电流的影响;漏源开态电阻(RDS(ON))随Vgs变化的曲线(图8、图9)展现不同控制电压下的阻抗;图10可能涉及电容特性,对开关操作的响应速度和稳定性有重要影响。 A1SHB三极管(PW2301A)是高性能P沟道MOSFET,适用于低内阻、高效率电源切换及其他多种应用。用户在设计电路时,需充分考虑其电气参数、封装尺寸及热管理,以确保器件的可靠性和长期稳定性。无锡平芯微半导体科技有限公司提供的技术支持和代理商服务,可为用户在产品选型和应用过程中提供有
资源下载链接为: https://pan.quark.cn/s/9648a1f24758 在 JavaScript 中实现点击展开与隐藏效果是一种非常实用的交互设计,它能够有效提升用户界面的动态性和用户体验。本文将详细阐述如何通过 JavaScript 实现这种功能,并提供一个完整的代码示例。为了实现这一功能,我们需要掌握基础的 HTML 和 CSS 知识,以便构建基本的页面结构和样式。 在这个示例中,我们有一个按钮和一个提示框(prompt)。默认情况下,提示框是隐藏的。当用户点击按钮时,提示框会显示出来;再次点击按钮时,提示框则会隐藏。以下是 HTML 部分的代码: 接下来是 CSS 部分。我们通过设置提示框的 display 属性为 none 来实现默认隐藏的效果: 最后,我们使用 JavaScript 来处理点击事件。我们利用事件监听机制,监听按钮的点击事件,并通过动态改变提示框的 display 属性来实现展开和隐藏的效果。以下是 JavaScript 部分的代码: 为了进一步增强用户体验,我们还添加了一个关闭按钮(closePrompt),用户可以通过点击该按钮来关闭提示框。以下是关闭按钮的 JavaScript 实现: 通过以上代码,我们就完成了点击展开隐藏效果的实现。这个简单的交互可以通过添加 CSS 动画效果(如渐显渐隐等)来进一步提升用户体验。此外,这个基本原理还可以扩展到其他类似的交互场景,例如折叠面板、下拉菜单等。 总结来说,JavaScript 实现点击展开隐藏效果主要涉及 HTML 元素的布局、CSS 的样式控制以及 JavaScript 的事件处理。通过监听点击事件并动态改变元素的样式,可以实现丰富的交互功能。在实际开发中,可以结合现代前端框架(如 React 或 Vue 等),将这些交互封装成组件,从而提高代码的复用性和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值