`
Hillen.chan
  • 浏览: 62584 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

service注入Action

阅读更多
1.老爸操持型 
这种类型,即是在BaseAction中提供一个getBean(String  beanName)的父类方法,业务Action  在需要Serivce时,调用父类的getBean()得到Object型的Service,再Cast。 
e.g. 


代码
程序代码:
public class BaseAction extends DispatchAction   
{   
   ...    
   public Object getBean(String name)   
  {   
      if (ctx == null)   
      {   
          ctx = WebApplicationContextUtils   
                .getRequiredWebApplicationContext(servlet.getServletContext());   
      }   
      return ctx.getBean(name);   
  }   
}  



2.自已动手型 
自己动手  丰衣足食,再加了自从有了IoC,所谓动手也只是衣来后的伸手和饭来后的张口。自己动手型,即是利用Spring的IoC,将IoC容器中的Service注入到Action中,当然Action需要提供注入服务有setter. 
如果采用这种方式,首先需要让Spring接管Struts,然后在Spring配置文件中,配置Action的注入属性。 
首先.在struts-config.xml将Spring引狼入室。 


代码

程序代码:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">    
        <set-property property="contextConfigLocation"    
                                  value="/WEB-INF/action-servlet.xml"    
        />    
</plug-in>   




然后,Struts再向Spring投怀送抱: 


程序代码:
<bean id="userService" class="com.nic.service.UserServiceImpl">  
    <property name="userDao">  
    <ref bean="userDao" />  
    </property>  
</bean>    
<bean name="/userAction" class="com.stamen.web.UserAction">  
   <property name="userService" ref="userService"/>  
</bean>  



聪明的你一下就看出“/userAction  ”即是com.stamen.web.UserAction在Struts中的配置名。 

3.朋友帮忙型  朋友多了好办事,凡事都自己动手总有一天会活活累死,所有Action为自己需要的Service提供setter,并且在Spring中注入,好累啊。小学生都在减负了,我们也来为Action减减负吧--提供一个专门 
查找Serivice的ServiceLocator,负责获取所有的Service,该类为每个Service提供专门的获得方法,如: 

程序代码:
 public class ServiceLocator   
  
   private static ApplicationContext factory = null;   
   public static void init(ApplicationContext ctx)   
   {       
       factory = ctx;   
   }   
   public static LogService getLogService()   
   {   
       return (LogService) ServiceLocator.getBean("logService");   
   }   
  
   public static UserService getUserService()   
   {   
       return (UserService) ServiceLocator.getBean("userService");   
   }   
   public static PieeService getPieeService()   
   {   
       return (PieeService) ServiceLocator.getBean("pieeService");   
   }   
   public static PieeGrid getPieeListService()   
   {   
       return (PieeGrid) ServiceLocator.getBean("pieeListService");   
   }   
   ...   
}   



Action要用哪个Serivce时,直接通过ServiceLocator.getXxxService()就可以获得了,省去了 
“老爸操持型”指定Service  名和Cast的繁琐,比在Spring中IoC来IoC去也来得省心省力。 

下面做一个自己的分析小结: 

1.“老爸操持型”  将serviceName分散到代码中,到时配置文件中serviceName一改,得牵一毛而动全身->维护性差;且要进行Cast转换,怎一个繁字了得。 

2.“自己动手型”也不好,不但在Action中要添加get/setXxxService代码,而且还要在Struts和Spring的配置文件中做好群众的大串连工作,难道我们的配置还不够多吗?吃回香豆的,你别又跳出来啊:) 

3.“ 朋友帮忙型”,目前,我认为是比较好的方式,ServiceLocator象一个服务周到
分享到:
评论

相关推荐

    SSH知识回顾与整合说明

    例如,SessionFactory注入Dao,Dao注入Service,Service注入Action。 6. SSH整合 - Spring整合Struts:Action类由Spring管理,通过ID找到Action,`web.xml`中的Action配置需引用Spring中的bean ID - Spring整合...

    Web服务器端在Action、dao、service之外实现spring注入

    我们在开发过程中经常会发生spring注入错误或失败的情况,其实Web服务器端在Action、dao、service包之内是很容易实现的,在这些包之外实现spring注入就不容易了,总是出错,其实根本原因是无法获得相应的spring上...

    SSH框架网上商城项目第2战之基本增删查改、Service和Action的抽取

    在本SSH框架网上商城项目的第二阶段,我们将关注的重点放在了基本的数据操作,即增删查改(CRUD),以及业务逻辑层(Service)和控制层(Action)的抽象与抽取。这一过程对于任何基于SSH(Struts2、Hibernate、...

    通过AccessibilityService实现系统按键监听功能

    &lt;action android:name="android.accessibilityservice.AccessibilityService" /&gt; android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" /&gt; &lt;/service&gt; ``` ...

    Spring In Action 属性注入

    《Spring In Action 属性注入详解》 在Java开发中,Spring框架因其强大的依赖注入(Dependency Injection,简称DI)特性而备受推崇。属性注入是DI的一种实现方式,它允许我们在不直接编写代码创建对象的情况下,...

    ssh.rar_Action!_service dao_ssh action_ssh com.dao_ssh dao

    4. `*.java`:Action类、Service接口及实现类、DAO接口及实现类、POJO(Plain Old Java Object)实体类等源代码。 5. `*.hbm.xml`或`@Entity`注解的Java类:Hibernate实体映射文件或JPA注解,描述了数据库表与Java类...

    .NET Core使用自定义服务(依赖注入方式) 适合新手入门

    依赖注入(Dependency Injection,简称DI)是.NET Core中一个关键特性,它有助于实现松散耦合,使得代码更易于测试和维护。本文将深入探讨如何在.NET Core中使用依赖注入来创建和使用自定义服务,特别适合初学者入门...

    在一个ssh框架的项目当中,页面、action、service、model、dao1

    描述中提到的"action调用service",表明Action会调用由Spring管理的Service对象来执行具体的业务逻辑。 **Service** 层是业务逻辑层,它封装了应用程序的核心业务功能。Service通常会依赖于DAO来与数据库进行交互,...

    Android本地注入事件

    5. **AccessibilityService**:这是实现事件注入的一种常见途径,它允许服务监听并响应系统的无障碍事件,包括触摸屏幕和按键操作。 6. **JNI(Java Native Interface)**:在需要更底层操作,比如直接与Linux内核...

    Spring的自动扫描注入.docx

    例如,将 DAO 实现类注入到 Service 实现类中,将 Service 的接口(注意不要是 Service 的实现类)注入到 Action 中。在注入时,不要手动 new 该注入的类,因为 Spring 会自动注入。使用 @Autowired 后,不需要 ...

    spring3 mvc 注解action dao service 实例教程

    ### Spring 3 MVC 注解Action DAO Service 实例教程 #### 一、Spring 3 MVC 注解概述 Spring框架自诞生以来一直致力于为复杂的软件工程问题提供简洁且非侵入式的解决方案。随着版本的演进,Spring 2.0 引入了定制...

    struts hibernate spring 集成时使用依赖注入的方式的秘籍

    例如,你可以定义Action类、Service类、DAO类及其相应的SessionFactory和SessionFactoryBean。 2. **依赖注入**:Spring通过XML配置或者注解方式实现依赖注入。例如,可以在Action类中声明SessionFactory的setter...

    struts2+spring+hibernate整合中spring注入出错。页面中报空指针异常。高手来看看怎么决绝。

    2. **命名不匹配**:Spring在注入时会根据bean的ID或者Action类的属性名寻找对应的bean,如果两者不匹配,就会导致注入失败。确保ID与注解的`name`属性或属性名一致。 3. **扫描范围问题**:确认Spring的组件扫描...

    SSH框架注解方式,struts自身创建Action

    在这个过程中,Spring负责注入Action所需的依赖,而Hibernate则处理数据库交互。 **6. 缺少Maven的影响** 本项目未使用Maven作为构建工具,这意味着缺少了依赖管理和自动化构建的功能。开发者需要手动管理jar包,...

    SSH整合案例-商品管理.rar

    1. 公共类搭建 1.1 po对象及其映射 1.2util包工具类 ...3.7.编辑applicationContext.xml, dao注入sessionFactory,service注入dao,action注入service。实现Spring IoC配置 4 各模块具体实现 4.1 登录模块

    利用spring管理strurs里的Action

    1. **依赖注入**:Spring可以自动注入Action所需的服务,如DAO、Service等,降低了Action的复杂性。 2. **更好的测试性**:Action可以被设计为无状态,方便进行单元测试。 3. **解耦合**:Action的创建和管理由...

    Struts2+spring依赖注入+Hibernate+Dwr

    6. Action类:Struts2的控制器,处理HTTP请求并调用Service层的方法。 7. JSP页面:视图部分,通常使用Struts2标签库和DWR JavaScript库进行渲染和交互。 这个示例项目适合初学者了解和学习这四大框架的集成使用,...

    servlet与Struts action线程安全问题分析

    5. **使用`@Singleton`注解和CDI**:在某些框架中(如Spring),可以通过`@Singleton`注解配合依赖注入(DI)来确保每个请求都获取到一个新的Servlet实例。 对于Struts Action,其本质也是类似的,因为它同样会被多...

    SSH2及模型驱动,拦截器注入

    ### SSH2及模型驱动,拦截器注入 #### 一、SSH2框架介绍 SSH2(Struts2 + Spring + Hibernate)是一种常用的Java Web开发模式,它结合了三个强大的开源技术来构建高性能、易于维护的应用程序。 - **Struts2**:...

Global site tag (gtag.js) - Google Analytics