Spring入门示例及相关概念介绍

相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低、开发商之间不统一、没有真正实现“写一次到处使用”,它的优点有如下:

1、低侵入式设计,代码污染极低。

2、独立于各种应用服务,真正实现写一次到处都可以使用。

3、用户可选择的自由度高,用户可以选择部分或者是全部SPRING的功能,它并不是设计来取代其它框架,可以和其它的框架(如STRUTS、HIBERNATE)等结合极好。

4、面向接口的编程方式,使得代码的偶合度降到最低。

5、所有的BEAN默认都被会单态化,相同的BEAN只会被初使化一次,因而节省了BEAN初使化的时间及减少垃圾回收,增加了应用效率。

...

有以上的优点的结合,因而它是被广大程序员所欢迎的,因为它可以给我们带来高效、稳定的开发,很大程度的减少了程序的开发、维护周期,也就自然的减少了软件开发的费用。下面简单的介绍两个应用示例,这些示例都来自于书本,都简单易懂,我也会详细的加以说明,另外需要使用下面的示例,需要引用Spring的JAR包:Spring.jar,该JAR包包括了大部份的应用,如果暂时不需要SPRINT的其它功能,该JAR足以。

以下的程序,全部都是调试通过的。

示例一、不同的人说不同的话

1、建立接口

工厂模式在SRPING中是随处体现,且提倡面向接口,因此首先建立接口:人

package test;
public interface Person {
public void sayHello();
public void sayBye();
}

2、建立两种具体的人:中国人、美国人

//中国人

package test;

public class Chinese implements Person {
public void sayBye() {
System.out.println("再见");
}
public void sayHello() {
System.out.println("你好");
}
}

//美国人

package test;

public class American implements Person {
public void sayBye() {
System.out.println("Bye");
}
public void sayHello() {
System.out.println("hello");
}
}

3、建立bean映射配置文件,bean.xml(这个文件名是什么没有关系,在初使化的时候指定给初使化程序就可以)

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.sprintframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="test.Chinese"/>
<bean id="american" class="test.American"/>
</beans>

4、建立JAVA测试类:

public void doIt(){

/*获取bean映射配置文件,配置文件放于与当前测试类在同一个目录下*/
ApplicationContext ctx=new FileSystemXmlApplicationContext(getClass().getResource("bean.xml").toString());
Person person=null;
person=(Person)ctx.getBean("chinese");
person.sayHello();
person.sayBye();

person=(Person)ctx.getBean("american");
person.sayHello();
person.sayBye();
}

5、对以上示例调用的说明:

A)、对接口Person和具体实现类Chinese、American就没有什么需要说明的了,和其它的编程方式,都是先定义接口,实现类再通过继承接口实现其方法。

B)、映射类中将类的路径定义为一个id的名称,到时系统根据传到的id名称,到配置文件中去找到该类的绝对路径,再通过反射原理加载该类,并返回其对象,这个是通过getBean这个动作完成的。

C)、根据里氏代换原则,能够接收父类的地方,都可以接收子类,所以这个时候通过getBean返回的对象(如Chinese或者American),都可以赋给接口Person,这个时候接口类调用其中的方法的时候,因为这个时候父类实际上接受的是子类的对象,因而这个时候调用的就是指定子类的方法。这个时候Spring就帮我们完成了如下工作:

Person person=new Chinese();


只是子类不是通过显示给出来的,而是通过Spring工厂通过映射配置生成的。



示例二、设值注入

设值注入是依赖注入的一种,依赖注入早期叫控制反转,也可以称反射,他们的意义都相同。当某个 Java 实例(调用者)需要另一个Java 实例(被调用者)时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。而在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,通常由 Spring 容器来完成,然后注入调用者,因此称为控制反转,也称为依赖注入。

1、建立接口:人与斧头

人,定义一个动作:

package test2;
public interface Person {
public void useAxe();
}

斧头,定义一个动作:

package test2;

public interface Axe {
public void chop();
}

2、建立接口的实现类:中国人与石斧

中国人

package test2;

public class Chinese implements Person{
/*默认无参构造方法不管为私的还是公有的,都可以访问,并且要保证bean中存在可以被外界访问的无参构造函数*/
private Chinese(){};
/*定义需要被使用的斧头接口,具体使用什么斧头这里不管*/
private Axe axe;
/*定义被注入斧头的set方法,该方法一定要符合JAVABEAN的标准。在运行时候,
*Sping就会根据配置的<ref local=""/>,找到需要注入的实现类*/
public void setAxe(Axe axe){
this.axe=axe;
}
/*这个时候使用的axe,就不再是接口Axe本身,而是被注入的子类实例,所以这里的chop()动作就是具体子类的chop动作*/
public void useAxe() {
axe.chop();
}
}

石斧

package test2;

public class StoneAxe implements Axe {
public void chop() {
System.out.println("石斧慢慢砍");
}
}

3、建立映射配置文件bean.xml:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.sprintframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="test2.Chinese">
<!-- 声明实现类test2.Chinese中的属性 -->
<property name="axe">
<!-- 指定其中声明的属性,需要用本地的那个id对应的class
这里local的值为"stoneAxe",表示axe的属性值在注入的时候,
将会用test2.StoneAxe实例注入,到时在实例类Chinese中使用
axe的时候,实际上调用的时候StoneAxe的实例
-->
<ref local="stoneAxe"/>
</property>
</bean>
<bean id="stoneAxe" class="test2.StoneAxe"/>
</beans>

4、测试用例:

package test2;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Caller {
public static void main(String[] args) {
Caller caller=new Caller();
caller.doIt();
}
public void doIt(){
String bean=getClass().getResource("bean.xml").toString();
ApplicationContext ctx=new FileSystemXmlApplicationContext(bean);
Person person=(Person)ctx.getBean("chinese");
person.useAxe();
}
}

5、对以上示例调用的说明:

程序及XML文件中都有详细说明,这里就不说明了。



三、构造注入:

构造注入即是通过构造函数进行注入,到目前为止,SPRINT支持设值注入与构造注入两种方式,它们可以同时存在。

现在采用的实例为了和设值注入进行对比,因此使用的程序都是设值注入的程序,其中的接口和测试实例都不需要修改,修改的只是需要被注入的实现类Chinese,以及配置文件,不同之处用加粗体表示。

1、修改实现类Chinese如下;

package test2;
public class Chinese implements Person{
/*默认无参构造方法不管为私的还是公有的,都可以访问,并且要保证bean中存在可以被外界访问的无参构造函数*/
private Chinese(){};
/*定义需要被使用的斧头接口,具体使用什么斧头这里不管*/
private Axe axe;
public Chinese(Axe axe){
this.axe=axe;
}
/*这个时候使用的axe,就不再是接口Axe本身,而是被注入的子类实例,所以这里的chop()动作就是具体子类的chop动作*/
public void useAxe() {
axe.chop();
}
}

2、修改配置文件bean.xml:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.sprintframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="test2.Chinese">
<!-- 定义需要被构造注入的实现类,同设值注入的结果一样,都是注入接口的实现类 -->
<constructor-arg><ref bean="stoneAxe"/></constructor-arg></bean>
<bean id="stoneAxe" class="test2.StoneAxe"/>
</beans>



3、设值注入与构造注入实现的结果是一样的,都在将需要被调用的实现类注入到调用的实现类。

设值注入与传统JAVABEAN的写法一样,比较容易接受;而构造注入在应用程序加载的时候就已经完成了注入,可以控制加载顺序。各有优缺点,根据不同的情况选用了。



四、后记

编程中理解与使用SPRING就像是人从学走路到跑步的过程,如果没有理解什么是单态模式、工厂模式、反射、JAVABEAN、XML基础、接口及其实现等等,理解SPRING就会比较困难,就算是可以使用通,也不一定知道为什么,看看网上的一些信息,动不动要求说会不会SPRING、HIBERNATE等等,很少提到基础知识是否扎实。我在面试别人的过程中,往往更注意面试人员的程序基础、编程风格、动手能力、文档编写能力等,当然对当前一些流行的框架也会有提问,毕竟好的东西也是需要借签的。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fenglibing/archive/2009/06/26/4300517.aspx
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring 是一个开源的 Java 开发框架,可以帮助开发者快速构建企业级应用程序。要快速入门 Spring,可以先学习 Spring 的核心概念,如 IoC、AOP、Bean 等,然后通过实践来深入理解。建议先学习 Spring 的官方文档和教程,同时可以参考一些优秀的 Spring 教程和书籍,如《Spring 实战》、《Spring 揭秘》等。另外,可以通过搭建一个简单的 Spring 项目来加深对 Spring 的理解和应用。 ### 回答2: Spring 是一款流行的开源框架,用于开发Java应用程序。要快速入门Spring,可以按照以下步骤进行: 1. 学习Spring的基础知识:首先,了解Spring框架的概念和优势,明确它可以解决哪些问题和应用场景。学习Spring的基本概念,如控制反转(IoC)和面向方面编程(AOP)。 2. 设置开发环境:安装Java Development Kit(JDK)和集成开发环境(IDE),如Eclipse或IntelliJ。然后,下载Spring框架并导入到开发环境中。 3. 学习Spring的核心模块:重点学习Spring的核心模块,如Spring Core和Spring Context。了解如何配置和管理Spring Bean和依赖注入。 4. 学习Spring的数据访问模块:继续学习Spring的数据访问模块,如Spring JDBC和Spring ORM。了解如何使用Spring简化数据库访问和操作对象关系映射(ORM)。 5. 学习Spring的Web开发模块:学习Spring的Web开发模块,如Spring MVC。了解如何使用Spring MVC构建Web应用程序,并处理请求和响应。 6. 初步实践:使用Spring框架来开发一些简单的应用程序或小项目。这有助于巩固所学的知识,并帮助你理解Spring在实际应用中的用法和特性。 7. 学习Spring周边技术:Spring生态系统非常丰富,还包括许多与之配套的技术和工具。学习与Spring相关的其他技术,如Spring Boot、Spring Security和Spring Cloud等。 8. 参考和实践:查阅Spring官方文档和教程,阅读相关书籍和博客,参加Spring培训或在线课程。通过实践项目和与其他开发者讨论,进一步提高你的Spring技能和应用水平。 通过以上步骤,你可以快速入门Spring,并开始使用它来开发高效、灵活且维护性强的Java应用程序。 ### 回答3: 要快速入门Spring,可以按照以下几个步骤进行: 1. 学习Spring的基本概念:理解Spring的核心概念,如控制反转(IoC)和依赖注入(DI),并了解Spring框架的特点和优势。 2. 配置开发环境:下载并安装Java开发工具(如Eclipse、IntelliJ IDEA等),并配置好Java开发环境。此外,还需要下载Spring框架的jar包,并将其添加到项目的类路径中。 3. 学习Spring的不同模块:Spring框架由多个模块组成,例如Spring Core、Spring MVC和Spring Boot等。在学习的过程中,依次了解每个模块的功能和用法,可以通过查看Spring的官方文档或者参考书籍来加深理解。 4. 实践编码:通过编写简单的示例程序来加深对Spring框架的理解和运用。可以通过教程或者示例代码来学习Spring的基本用法,包括配置文件的编写、Bean的创建和注入、AOP等。 5. 参与社区和讨论组:在Spring的社区中,有很多开发者都在探讨Spring的使用和问题解决。可以参与相关的讨论组或论坛,向其他开发者请教问题,分享自己的经验和学习心得。 6. 持续学习和实践:Spring是一个庞大而复杂的框架,学习它需要一定的时间和耐心。要不断地学习和实践,探索更深入和高级的功能和技术。可以阅读更多的书籍和文章、参加培训班或者学习小组,提升自己在Spring开发中的技术水平。 总之,快速入门Spring需要扎实的基础和坚持不懈的学习态度。通过理论学习和实践编码相结合,可以更好地掌握和应用这个强大的框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值