我对轻量级(struts+spring+hibernate)j2ee的理解(二)

原创 2007年09月27日 22:40:00
 

五、开发DAO

dao层的开发中我们将进入到spring框架,spring主要是以依赖注入、AOP为核心,下面是spring的框架图:

(1)    理解依赖注入(Dependency Injection

依赖注入是spring的核心机制,是spring实现组件松耦合的利器。在实际应用中,java对象不是孤立存在的,为了完成某项任务,java对象需要依靠其它对象来协助或分工完成任务。那么在一个对象里怎样引用其它对象呢?最直接的方法是new 一个其它对象,这种紧耦合的方式不符合软件设计的理念,组件的可重用性大大降低,使得每次开发都要重复发明轮子。第二种方法是利用工厂模式,间接获取对象引用。这种方法在依赖注入出现前是主要使用的方法,它虽然实现了对象间的松耦合,但又将工厂类耦合到了对象中,对象还是通过主动的方式显式的获取其它对象的引用,也降低了组件的重用性。第三种方法就现在大放光彩的依赖注入。它是建立在工厂模式的基础之上,但减去了对象和工厂类的耦合,把这个过程放在了“后台”,它核心机制是利用xml配置文件解耦,通过容器(container)读取xml配置文件来实例化各个java对象,以及将它们的引用注入给需要它们的对象中(在xml中配置)。其中良好的面向接口编程理念和合理的注入方式是依赖注入成功的关键所在。下面我们通过一个”hello world”小应用来体会一下spring的魅力(先将springjar添加到ClassPath)

1)首先我们编写一个对象接口:

package com.sample.spring;

 

public interface GreetingService{

    void sayHello();

}

(2)  实现该接口

package com.sample.spring;

 

public class GreetingServiceImpl implements GreetingService{

   private String greeting;

   public GreetingServiceImpl(){}

  

   //构造器注入

   public GreetingServiceImpl(String greeting){

       this.greeting=greeting;

   }

  

   public String getGreeting() {

       return greeting;

   }

   

   //设值注入

   public void setGreeting(String greeting) {

       this.greeting = greeting;

   }

 

   public void sayHello(){

       System.out.println(greeting+" say hello world!");

   }

}

在这个实现类中我定义了一个属性greeting,大家发现我们没有设置它的值,那么应用是怎样获得这个属性的值呢?换句话说怎样将这个属性值注入到它属性中呢?这就是依赖注入的魅力-----不必主动获取,你只要指明依赖关系,容器会自动给你,你不必关心或了解它的实现,它从哪来,只要拥有它的接口,你就可以利用它的接口方法来完成你任务。当然对象间的关系和依赖注入是要通过spring的配置文件来指定和完成的。下面我们来看看这个应用的spring配置文件:greeting.xml位于应用的根目录下

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" >

<beans>

   <bean id="greetingService" class="com.sample.spring.GreetingServiceImpl">

      <property name="greeting" value="tom"></property>

   </bean>

</beans>

很简单,beans根元素下可以配置多个bean,每个bean代表一个需要配置的java对象,id为该对象接口的别名,在同一个配置文件里,id值不允许相同。class为该对象接口的实现类,通过配置文件可以随时改变它的接口实现类,因此很好的实现了松耦合。property属性表示需要依赖注入对象的属性为greetingvalue对应注入的值,spring自动调用对象的setGreeting(“tom”)方法完成依赖注入。我们可以改变value的值来改变注入给greeting的值。

   最后,我们写一个简单的java应用程序来调用这个组件。

package com.sample.spring;

 

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

 

public class GreetingApp{

    public static void main(String[] args){

       ApplicationContext ctx=new FileSystemXmlApplicationContext("greeting.xml");

       GreetingService service=(GreetingService)ctx.getBean("greetingService");

       service.sayHello();

    }

}

此时控制台打印出:tom say hello world!

 

在上面的程序中用到了spring的两个类:

org.springframework.context.ApplicationContext

org.springframework.context.support.FileSystemXmlApplicationContext

ApplicationContextspring解析配置文件的应用上下文接口类

FileSystemXmlApplicationContext是它的一个实现类,将greeting.xml作为参数传递给它,应用会自动完成java对象的实例化和依赖注入。

ctx.getBean(“greetingService”)返回该对象的引用,参数为在配置文件中定义的id的值。由于是面向接口编程,可以把它upcast成接口类,最后调用接口方法sayHello(),实际执行的是它的实现类的sayHello()方法,这是利用java的多态和动态绑定机制实现接口和实现类的松耦合。总之使用spring就是使用接口编程和依赖注入来实现松耦合,这是spring的核心理念。接下来我们来看看AOP

到底什么是javaEE、什么是JavaSE,我们用Spring等框架用的jdk到底是什么的思考

jdk是什么   jdk是java的开发工具包,jdk不分javaME, javaSE和javaEE   javaME,javaSE和javaEE是什么   网络上普遍认为javaME就是...
  • ak47java
  • ak47java
  • 2017年12月21日 15:10
  • 145

那些年,追过的开源软件和技术

那些年,追过的开源软件和技术 前言 笔者也是在互联网软件行业里面摸爬滚打十年多了,回头想想青葱岁月,很多时间都花在各种技术热潮的追逐上,有些是有价值的,也有些因为没人指导走过弯路,下面我就...
  • YaoXTao
  • YaoXTao
  • 2016年04月07日 09:38
  • 1122

我对轻量级(struts+spring+hibernate)j2ee的理解(一)

  我对轻量级j2ee的理解一、前言随着java和java开源框架的不断发展,以java web为基础的企业级应用开发技术也越来越完善和成熟。其中用开源框架如(struts,spring,hibern...
  • wangke8476
  • wangke8476
  • 2007年09月19日 22:48
  • 1693

[整理]j2ee常用轻量级框架

JAVA EE常用轻量级框架技术1.Struts   Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages ...
  • jingyucustom
  • jingyucustom
  • 2009年10月02日 08:24
  • 612

【JAVAEE】用最快最酸爽最简单的方式开发Android接口

之前有个哥们给我一个SSM(Spring+SpringMVC+MyBatis)框架的工程,让我研究研究android接口的快速开发,得知这个很爽的SSM框架后,我开始研究这个工程,后来实验了半天,作为...
  • u011539882
  • u011539882
  • 2016年09月19日 10:22
  • 2898

J2EE常用的JAR及开源项目

J2EE常用的JAR及开源项目 activation~与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到l...
  • kevingao
  • kevingao
  • 2012年10月29日 19:33
  • 3132

孙鑫J2EE视频教程

eMule资源 下面是用户共享的文件列表,安装eMule后,您可以点击这些文件名进行下载 [孙鑫J...
  • javadiablo
  • javadiablo
  • 2007年08月17日 22:53
  • 2707

J2EE轻量级框架--3.28学习心得

关于映射的关系,不管是一对一,一对多,或者是多对多的理解应该站在不同对象的角度去看,便很好理解...
  • xiangchunxiaoshan
  • xiangchunxiaoshan
  • 2016年03月28日 22:04
  • 151

【J2EE】:MVC是框架?是设计模式?是架构?还是……

上篇博客简单聊了聊MVC模式,但是有一个很重要的问题我没有提到,那就是对MVC的定位,它是什么? 很多人都知道MVC,都知道就是把将数据和显示分离,知道Model—View—Controller,...
  • u010929604
  • u010929604
  • 2016年03月14日 07:58
  • 3659

那些年,追过的开源软件和技术

前沿 笔者也是在互联网软件行业里面摸爬滚打十年多了,回头想想青葱岁月,很多时间都花在各种技术热潮的追逐上,有些是有价值的,也有些因为没人指导走过弯路,下面我就把我自己接触到这么多优秀的开源软件给大家做...
  • ShareUs
  • ShareUs
  • 2016年04月07日 09:16
  • 915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我对轻量级(struts+spring+hibernate)j2ee的理解(二)
举报原因:
原因补充:

(最多只允许输入30个字)