[Java] 第一个Spring Demo

1  Spring关键字:

DI:Dependency Injection,依赖注入。依赖指的是调用关系。A调用B则A依赖于B。注入指的是A不再new B对象,而是由Spring容器来注入B对象。

IoC:控制反转,对象不再由调用者来new,而是把new对象的任务交给Spring容器,Spring从XML中读取对象的属性值。

AOP:面向切面变成(区别于面向对象编程OOP)。so,切面是什么?一些公共行为?

DAI:Spring整合了针对多种数据库的访问方式(含JDBC、OXM等)

框架融合:可以融合Hibernate和Struts框架

解藕:为什么用了依赖注入就解藕了?

“神说:要有光。于是就有了光”

2  Spring下载:

源文件:springframework-4.1.6.zip

虽然下载到的压缩包并未以src命名,但源文件确实不包含可以直接使用的jar包,而是包含各个Spring模块的java类源代码。也许是需要将那些源代码加入到用户的项目中?活着自己编译出JAR?。方便用户修改Spring框架本身。目录中提供了import-into-eclipse.sh来引导我们将那些源代码构建城eclipse的项目,完成这一步之后才能导入到eclipse中。

移步 https://github.com/spring-projects/spring-framework

JAR包(RELEASE发行版):springframework-4.1.6-RELEASE

Spring官网改版后,不再直接提供JAR的下载链接。因为Spring自此只建议用MAVEN等依赖管理工具,而不是手动地复制JAR包到用户的项目目录,然后手动地将JAR导入为LIBRARY。

移步 repo.spring.io/libs-release-local/org/springframework/spring/ (这个站点除了由spring地发行版,还各个模块单独的RELEASE,还有许多其他资源)

3  用Demo说明如何使用Spring

a  对于像我这样对MAVEN不甚了解的菜鸟,最简单的办法还是把相关的JAR复制到项目里,然后添加为lib。Spring还需要commons-logging的库,否则会报ClassNotFoundException。下载,解压缩,把里面的jar包复制到项目里。

b  该写的类写好。比如:

 1 package com.bean;
 2
 3 public abstract class Person {
 4
 5     String name;
 6     int age;
 7
 8     public String getName() {
 9         return name;
10     }
11
12     public int getAge() {
13         return age;
14     }
15
16     public void setAge(int age)
17     {
18         if(age>=0) this.age = age;
19     }
20
21     public void setName(String name)
22     {
23         if(name!=null) this.name=name;
24     }
25
26     public void show()
27     {
28
29     }
30 }
 1 package com.bean;
 2
 3 public class Chinese extends Person{
 4
 5     public Chinese()
 6     {
 7     }
 8     public Chinese(String name, int age)
 9     {
10         setName(name);
11         setAge(age);
12     }
13
14     public void show()
15     {
16         System.out.println("Chinese - " + name + " " + age);
17     }
18 }
 1 package com.bean;
 2
 3 public class French extends Person{
 4
 5     public French()
 6     {
 7     }
 8     public French(String name, int age)
 9     {
10         setName(name);
11         setAge(age);
12     }
13
14     public void show()
15     {
16         System.out.println("French - " + name + " " + age);
17     }
18 }

    要写无参数的构造函数;

    要写set方法和get方法;

    要写public的set和get方法;

    当然也可以写一些其他方法,因为对象创建出来是拿来用的不是拿来保存属性值的。

c  在src目录下面新建一个XML文件,例如appContext.xml。这个文件用于指导Spring容器构建什么样的对象。对于要用Spring容器构建对象的类,需要提供无参数的构造函数,否则报org.springframework.beans.BeanCreationException和org.springframework.beans.BeanInstantiationException等异常。

d  appContext.xml的写法:

1 要写上xmlns,也就是XML namespace(命名空间),命名空间有唯一的URI。Java和XML都不会检查该URI是否有效,但是Spring会检查。因此要写上正确的URL。如果xmlns的URI是什么奇怪的东西而不是http://www.springframework.org/schema/beans,将报错提示找不到<beans>.

2 也要写上xmlns:xsi属性,这个是XML的规范,同样不能写其他奇怪的东西,必须写真正的XML规范的URL。浏览器可以访问到这个URL。

3 xmlns:aop之类的,爱写什么写什么。。。(Spring只是选择性强迫症,不检查这个)

4 xsi:schemaLocation要写正确的路径(Spring至少会先检查这里面的URL个数是不是偶数个 = =)

5 剩下就是告诉spring如何new对象了。

<bean id="变量名" name="包.类">    //一定要加双引号

<property name="属性的变量名">  //要双引号

         <value>XXX<value>                //要写正确的属性值,否则报类型错误异常

</property>

</bean>

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- ApplicationContext Objects Configuration -->
 3 <beans
 4         xmlns="http://www.springframework.org/schema/beans"
 5         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 6
 7         xmlns:aop="what the fuck...here...a =3=oooooops!"
 8         xmlns:tx="so what the fuck...here..tx"
 9
10         xsi:schemaLocation="http://www.springframework.org/schema/beans
11         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
12         http://www.springframework.org/schema/aop
13         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
14         http://www.springframework.org/schema/tx
15         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
16         >
17
18     <bean id="chinese" class="com.bean.Chinese">
19         <property name="name">
20             <value>"小明"</value>
21         </property>
22         <property name="age">
23             <value>10</value>
24         </property>
25     </bean>
26
27     <bean id="french" class="com.bean.French">
28         <property name="name">
29             <value>"Von"</value>
30         </property>
31         <property name="age">
32             <value>11</value>
33         </property>
34     </bean>
35 </beans>
36
37 <!--
38         xmlns="http://www.springframework.org/schema/beans"
39         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
40         xmlns:aop="http://www.springframework.org/schema/aop"
41         xmlns:tx="http://www.springframework.org/schema/tx"
42         xsi:schemaLocation="http://www.springframework.org/schema/beans
43         http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
44         http://www.springframework.org/schema/aop
45         http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
46         http://www.springframework.org/schema/tx
47         http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
48         >
49  -->

6 写个main函数:

使用ApplicationContext类来创建对象。这个方法是阻塞的,会等Spring搞完了再继续运行。实际上,用这一方式来创建对象相对与直接new,需要比较长的时间。ApplicationContext是个抽象类,他有三个子类,用来分别从不同的地方读取XML文件:

  ClassPathXmlApplicationContext在src目录下找

  FileSystemXmlApplicationContext从文件系统里找

  XmlWebApplicationContext去Web项目里找

可以通过get方法得到构建好的对象的引用。这些代码都是不需要try的,前提是用户确保XML是正确的(否则代码不是抛异常这么简单,而是完全不能用)

 1 package com.bean;
 2
 3 import org.springframework.context.*;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5
 6 public class Main {
 7
 8     public static void main(String[] args)
 9     {
10         Person p = null;
11         try{
12             @SuppressWarnings("resource")
13             ApplicationContext context = new ClassPathXmlApplicationContext("appContext.xml");
14             p = (Person) context.getBean("chinese");
15             p.show();
16             p = (French) context.getBean("french");
17             p.show();
18         }
19         catch(Exception ex)
20         {
21             ex.printStackTrace();
22         }
23     }
24 }

第一个Spring Demo到此结束。

7 为什么这样就解藕了?

在传统的模式中,new什么对象是代码里说了算的。如果将类的构建挪出来,并允许在外部的XML中定义如何构建他,就可以通过修改外部的XML文件来更改程序的行为,而不需要重新编译。

在传统的模式下,“神说,要有光”,然后神要去发明光,才会有。下一次我们想要黑色的光呢(当然没有光是黑色的),需要在“创世纪”这个程序的代码里修改new语句,在初始化阶段修改对象的属性,或者把new Light()改称new DarkLight(),但这最好保证两个类是同一个父类的多态类或来自同一个接口,并且没有不一致的其他方法。

在Spring中,“神说要有光,于是就有了光”,光是根据XML的配置来注入给神的。下一次我们想要黑色的光了呢,改一下XML里光对象的属性值,或者,把bean的class属性由Light改成DarkLight,重新运行“创世纪”程序,光就变黑了!

时间: 2024-10-08 20:00:22

[Java] 第一个Spring Demo的相关文章

第一个Spring demo

参考Spring3.x企业实战 1.新建web工程chapter5,导入jar包.注意:cglib和commons-dbcp这两个包 2.设计数据库 t_login_log表结构(存放日志信息),主键递增 t_user表结构(存放用户信息),主键递增 3.设计包结构 4.domain对象 User.java package com.baobaotao.domain; import java.io.Serializable; import java.util.Date; public class

第一个spring小demo

工作中用spring有一年多了,基本弄懂了bean配置文件的配置,但是却没有对spring配置文件,加载有更多的认识,今天动手写了第一个spring的小demo. 这个demo之前是想做web版的,但是web的启动比较麻烦,不如直接使用main方法执行直观,所以,就使用main方法来读取配置文件,启动spring. 看一下项目的结构  其中src部分是项目源码 和 配置文件applicationContext.xml WebContent 目录下面的WEB-INF/lib 目录下面存放的是spr

这是关于FastJson的一个使用Demo,在Java环境下验证的

1 public class User { 2 private int id; 3 private String name; 4 public int getId() { 5 return id; 6 } 7 public void setId(int id) { 8 this.id = id; 9 } 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.n

[Java] Maven 建立 Spring MVC 工程

GIT: https://github.com/yangyxd/Maven.SpringMVC.Web 1. 建立 WebApp 工程 下一步: 下一步: 选择 maven-archetype-webapp 下一步,设置 Group ID, Artifact Id 以及 package 包名. 点击 Finish 完成. 可以看到有一些错误. 解决办法: 1. 在 Project Explorer 中的项目上点击右键,在弹出菜单上点击 "Properties" , 在属性对话框中,定位

使用docker构建第一个spring boot项目

在看了一些简单的docker命令之后 打算自己尝试整合一下docker+spring boot项目本文是自己使用docker+spring boot 发布一个项目1.docker介绍 docke是提供简单易用的容器接口Docker 将应用程序与该程序的依赖,打包在一个文件里面.运行这个文件,就会生成一个虚拟容器.程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样.有了 Docker,就不用担心环境问题. 总体来说,Docker 的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入

只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简洁的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼,简化Spring配置简直可以说是民心所向. Spring Boot是由Pivotal团队提供的一个基于Java的全新的开源框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.如今,Spring Boot逐渐成为快

快速构建一个Spring Boot+MyBatis的项目IDEA(附源码下载)

如何快速构建一个Spring Boot的项目 工具 idea JDK版本 1.8 Spring Boot 版本 1.5.9 环境搭建实现:最基础前端可以访问到数据库内的内容 开始 IDEA 内部新建一个项目,项目类型选择Spring Initializr,Project SDK选择适合你当前环境的版本,这里我选择的是1.8(Spring Boot 2.0以上的版本,JDK选择请选择1.8即以上版本),构建服务选择默认就好,点击Next 填写Group和Artifact(此处我使用的是默认,请根据

02-第一个Spring Boot应用程序

Spring Boot深度课程系列 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017.2.1 ,Spring Boot 版本:2.2.42. 2.步骤介绍 3.编写Helloworld,参照Spring MVC的写法 A) 在chapter01文件夹下创建包controller,创建类HelloController. B) 代码如下 package com.java.chapter01.controller; import org.spr

用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中

我最近在用java写一个远程视频监控系统,实时监控(类似直播)我想用RPT协议,不知道怎么把RPT协议集成到项目中,第一次写项目,写过这类项目的多多提意见,哪方面的意见都行,有代码或者demo的求赏给我,谢谢