JavaEE_SSM框架_Spring之【九层之台,始于累土】

 一、Spring框架所需的jar包


 

Spring所需jar包

 

二、Spring的配置文件applicationContext.xml


 配置文件放在【classpath】目录下,即src下,配置文件的截图如下

 

Question:What is classpath?克拉斯帕斯是瓦特?

 

三、Spring之HelloWorld


学习Spring的原因:代码开发完以后,如果需要修改,尽量不动源代码,只修改配置文件

 

Ⅰ、添加jar包


Spring的jar包

 让Eclipse中的所有Spring相关的练习公用一份jar包——>新建user Library

将jar包i添加到user Library中

jar包的介绍

jar包名字

说明
aspectjweaver-1.9.4.jaraop(必须的工具包)
hamcrest-core-1.3.jarjunit(单元测试)
junit-4.12.jar
log4j-api-2.12.1.jarlog4j(Java日志)
log4j-core-2.12.1.jar
spring-aop-5.2.1.RELEASE.jarspring(AOP)
spring-aspects-5.2.1.RELEASE.jar
spring-beans-5.2.1.RELEASE.jarspring(IOC)
spring-context-5.2.1.RELEASE.jar
spring-context-support-5.2.1.RELEASE.jar
spring-core-5.2.1.RELEASE.jar
spring-expression-5.2.1.RELEASE.jar表达式
spring-instrument-5.2.1.RELEASE.jar 
spring-jcl-5.2.1.RELEASE.jar 
spring-jdbc-5.2.1.RELEASE.jarspring封装了JDBC
spring-jms-5.2.1.RELEASE.jarjavaMessageSystem
spring-orm-5.2.1.RELEASE.jarORM:框架
spring-tx-5.2.1.RELEASE.jartx:事务管理器
spring-web-5.2.1.RELEASE.jarweb:封装了Servlet
spring-webmvc-5.2.1.RELEASE.jarspringmvc所需要的包

 

Ⅱ、Spring的配置文件【applicationContext.xml】


A、配置文件的位置

Spring的配置文件【applicationContext.xml】位置

B、配置文件一览

【applicationContext.xml】文件一览

 

Ⅲ、Spring的测试类BaseTest.java


 Ⅰ、加载配置文件

 通过【ClassPathXmlApplicationContext】加载【classpath】下的配置文件【applicationContext.xml

 

【BaseTest】

Spring的测试类【BaseTest.java】一览

 运行正常的结果

正常运行的结果

可能出现的异常

可能出现的异常——配置文件中存在空的<bean></bean>标签

原因

异常原因——配置文件中存在空的<bean></bean>标签

 

 

 

四、IOC:Inversion【反转】 Of Control【控制】


正转:没有Spring的时候,码代码的步骤:

Ⅰ、创建一个类【java源文件】

Ⅱ、定义属性和方法【类的两个要素】

Ⅲ、在测试类的【main】函数中New对象

Ⅳ、为属性赋值【注:Spring将会对(Ⅲ、Ⅳ)进行管理】

Ⅴ、调用属性

Ⅵ、调用方法

 【加背景色的部分被Spring收回,交给Spring来做

IOC其实就是一个容器【Container】,放的是多个bean,通过【id】快速找到【class】对应的对象【底层是一个map

IOC:控制反转,使用Spring

 

Ⅰ、创建一个类【java源文件】

Ⅱ、定义属性和方法【类的两个要素】

POJO类

Ⅲ、在测试类的【main】函数中New对象——>【在配置文件applicationContext.xml中处理】

【applicationContext.xml】

Ⅳ、为属性赋值【注:Spring将会对(Ⅲ、Ⅳ)进行管理】——>Dependency Injection依赖注入

// TODO 用Spring DI 为POJO类的属性赋值

Ⅴ、调用属性

Ⅵ、调用方法

【调用POJO类中的Getter方法获取属性的值】

 

五、Dependency【依赖】Injection【注入】:依赖注入


【依赖】:A类使用的时候需要先操作B类

【注入】:其本质即赋值

测试


 

【applicationContext.xml】
【测试】
【Console控制台运行结果】

 【测试结果】:

Ⅰ、使用【this.ac.getBean()】和【<bean>的id值】的返回值的【toString】中【hashCode】一样,即为同一对象

Ⅱ、默认创建的对象都是【单例】——>singleton【单例】

 A、使用Spring创建对象


  Q:如何创建单例【多例】对象 ?


 

【创建单例和单例】
【Console控制台运行结果——单例】
【Console控制台运行结果——多例】

用Spring创建单例【多例】总结:


在<bean>标签中控制创建单例多例】的属性:scope=" "【singleton[默认:单例]/prototype[多例] 】

 

【创建单例和单例】

 

 

Q:Spring创建对象的方法 ?


 Ⅰ、通过Spring配置文件的<bean>标签

【applicationContext.xml】

 Ⅱ、通过工厂创建对象

通过工厂创建对象步骤:

Ⅰ、创建工厂类

 

【工厂类】

Ⅱ、配置文件:【factory-bean】关联【bean的id】和【factory-method】关联工厂类的方法名【createFactory】

【applicationContext.xml】

 

【使用工厂创建对象的测试类及控制台运行结果】

 

B、使用Spring赋值


在未使用Spring时为类的属性赋值需要先new对象

在Spring的配置文件中的【<bean id="#" class="类的全限定名">】就相当于【类名 对象名 = new 类的构造方法()

 Q:【测试】Spring配置文件中的<bean>标签是否执行类的构造方法 ?

给【类的无参构造方法】做个标记
【Spring的配置文件】
【测试类】

【测试总结】

Ⅰ、不管测试类是否获取配置文件中【<bean>】,配置文件中的【<bean>】都会创建【类全限定名】指向的类的对象

Ⅱ、当  scope="prototype" 【多例】时,每获取一次【<bean>】,就会创建一个对象

Q:Spring创建对象默认调用无参的构造方法,

Ⅰ、通过【init-method】可以指定初始化调用的方法。

Ⅱ、通过【destory-method】 可以指定哪个方法作为结束 [销毁] 时调用的方法


【Spring配置文件中初始化及销毁时相关配置】
【指定初始化及销毁时调用的方法】
【测试类及运行的结果】

 

Spring赋值的方法


总结 

 【Ⅰ、通过构造器赋值的方法】


三种赋值方法的对比
第一种:按照形参的下标索引值赋值;方法的重载;必须要求有参构造方法的形参的个数不一样

如果形参的个数一样;数据类型不一样,通过下标赋值容易【驴唇不对马嘴】,类型不匹配

第二种:按照形参的数据类型进行赋值;方法的重载;必须要求形参的数据类型不一样

如果形参的数据类型一样;形参个数不一样,通过数据类型赋值容易【张冠李戴】

第三种:通过形参的名称进行赋值;    推荐使用

方法有多个形参,名字不一样,形参的顺序可以调换 

 

【Ⅱ、通过读写器赋值的方法】


通过<property>标签进行赋值,详见示例

【Ⅲ、其他赋值的方法】


a、使用P为属性赋值,P:后面的是属性名,不能随便填写

b、通过属性文件【.properties】为属性赋值

 

 

Spring赋值的示例

Ⅰ、通过构造方法赋值

【测试类及运行结果】

 

a、通过有参构造方法【形参的下标 [索引] 值】为类的属性赋值

【通过形参的下标索引值赋值】
【运行结果】

 b、通过有参构造方法【形参的数据类型】为类的属性赋值

【通过形参的数据类型赋值】
【运行结果】

  c、通过有参构造方法【形参的名称】为类的属性赋值

【通过形参的名称赋值】
【运行结果】

 

 

Ⅱ、通过读写器赋值【Setter和Getter方法】

为基本数据类型,引用数据类型,自定义引用类型的属性赋值

基本数据类型+引用数据类型

【整型、字符串类型、双精度浮点型】
【数组、List集合、Set集合】
【Map集、Properties类】

 自定义引用类型

【自定义引用类型】
【自定义引用类型可以通过<ref>的bean和<bean>的id关联】,效果一样
【读写器赋值的测试类及运行结果】

 

Ⅲ、其他的赋值方法

a、使用P为属性赋值,P:后面的是属性名,不能随便填写

【使用p赋值】
【测试类及运行的结果】

 b、通过属性文件【.properties】为属性赋值

【属性文件赋值】
【通过属性文件为属性赋值的相关配置】
【测试类及运行结果】
【name写成ASCII码】
【运行结果】

 

 

六、加载多个Spring的配置文件


 Ⅰ、在使用【ClassPathXmlApplicationContext】加载配置文件时设置配置文件的统一格式

【加载多个配置文件】

 要求:

a、所有的配置文件都在classpath下

b、配置文件的命名符合"applicationContext_*.xml",如:

【前两个为同一命名格式的配置文件】

 Ⅱ、在核心的配置文件中通过 【import】标签  引入其他的配置文件

【使用import标签可以加载同一格式的配置文件】

 

 

七、Spring的注解


 

A、Spring注解的使用


Ⅰ、先配置【applicationContext.xml】文件

Ⅱ、再使用注解     

【注:注解和XML的功能是一模一样的,注解的功能在步步的追赶XML】

XML:在编译的时候会原样拷贝到classpath中,而注解是写在Java代码中的,在编译的时候会编译成class文件(加密),

需要在Java源文件【源代码中修改

配置文件:这里存储的是经常修改的部分;不经常修改的配置放到注解中注:强烈不建议使用注解

 

B、自动装配


【设置自动装配及自动装配的值的说明】

 

C、【未使用注解的测试


 Ⅰ、测试的包的结构分层


测试的包的结构分层

  Ⅱ、源码


【POJO】类没有用到,故略。

 

Dao层

【Dao层】

 【Dao的实现类

【Dao的实现类】

 【Service层

【Service层】

 

 【Service的实现类

【Service的实现类】

applicationContext.xml

Spring的配置文件中的相关配置

 【测试类及运行结果】

【测试类及运行结果】

 

 

D、【使用注解的测试】


【配置文件】

【applicationContext.xml】

【Service实现类的注解】

Service的实现类

【Dao实现类的注解】

【Dao的实现类】

使用注解的总结:

Ⅰ、在配置文件中,设置默认自动装配方式为按照名称自动装配

【全局自动装配方式】

Ⅱ、在配置文件中,设置注解所在的包

【设置注解扫描仪】

 Ⅲ、在属性上写注解的时候,不需要使用读写器,

       @Resource:  去Spring的IOC容器找bean的名字为demoDynastyDao的Bean,

       如果找不到就去找【IADemoDynastyDao】的子类[实现类],实现类需要写注解  @Repository

       @Autowired: 按照类型去装配,先按照属性名去找bean的id为demoDynastyDao,找不到就按照类型去找

       @Autowired和@Resource效果一样

       建议:把dao的名字和属性名一样(如果不一样,会按照类型去找,如果子类多个,就会报错)

 

 

jar包使用小技巧


在以往使用【build path】配置【jar包】是这样的:

如果jar包多了,显得有些乱,并且有时候有些jar包用不上,则会占用空间,

所以对jar包进行分类,用一个“盒子”在整理归类,归类方法如下图所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值