1、Spring
Spring:一个JavaEE轻量级的一站式 Java EE的开发框架。Spring框架更加强调的是它的轻量级(模块的可插拔)!!也就是说,除了内核以外模块,如果你不想使用可以不用,它能够整合任何第三方的框架。所以,在现实开发中,Spring主要用于整合其他框架。
JavaEE: 就是用于开发B/S的程序。(企业级)
轻量级:使用最少代码启动框架,然后根据你的需求选择,选择你喜欢的模块使用。
一站式:提供了,表示层(Struts2),服务层,持久层的所有支持。(功能齐全,Spring全家桶)
下载spring框架的zip包路径为:http://repo.springsource.org/libs-release-local/org/springframework/spring/
2、根目录说明
(1)类库规程
(2)包说明
spring-aop-4.2.9.RELEASE.jar 实现了AOP的支持
spring-aspects-4.2.9.RELEASE.jar AOP框架aspects支持包
spring-beans-4.2.9.RELEASE.ja r内核支撑包,实现了处理基于xml对象存取
spring-context-4.2.9.RELEASE.jar 内核支撑包,实现了Spring对象容器
spring-context-support-4.2.9.RELEASE.jar 容器操作扩展包,扩展了一些常用的容器对象的设置功能
spring-core-4.2.9.RELEASE.jar 内核支撑包,Spring的内核
spring-expression-4.2.9.RELEASE.jar 内核支撑包,实现了xml对Spring表达式的支持
spring-instrument-4.2.9.RELEASE.jar 提供了一些类加载的的工具类
spring-instrument-tomcat-4.2.9.RELEASE.jar 提供了一些tomcat类加载的的工具类,实现对应Tomcat服务的调用
spring-jdbc-4.2.9.RELEASE.jar SpringJDBC实现包,一个操作数据库持久层的子框架
spring-jms-4.2.9.RELEASE.jar 集成jms的支持,jms:Java消息服务。
spring-messaging-4.2.9.RELEASE.jar 集成messaging api和消息协议提供支持
spring-orm-4.2.9.RELEASE.jar ORM框架集成包,实现了Hibernate,IBatis,JDO的集成。
spring-oxm-4.2.9.RELEASE.jar Spring OXM对主流O/X Mapping框架做了一个统一的抽象和封装。就是对应XML读写框架的支持
spring-test-4.2.9.RELEASE.jar Spring集成JUnit测试
spring-tx-4.2.9.RELEASE.jar 事务代理的支持
spring-web-4.2.9.RELEASE.jar SpringWeb通用模块
spring-webmvc-4.2.9.RELEASE.jar SpringMVC子框架
spring-webmvc-portlet-4.2.9.RELEASE.jar Spring对门户技术(portlet)的支持
spring-websocket-4.2.9.RELEASE.jar Spring对websocket的支持
3、入门事例
Spring是一个Ioc框架。要实现Ioc(控制反转)的前提,是不用new就可以创建对象。所以我们首先需要证明使用Spring框架,不用new就可以创建对象。
步骤:
第一步先导包:spring-beans-4.2.9.RELEASE.jar、spring-context-4.2.9.RELEASE.jarspring-core-4.2.9.RELEASE.jar、spring-expression-4.2.9.RELEASE.jar
第二步配置xml文件:name为变量名,class包名为类名
<bean name="text" class="cn.ong.Text"></bean>
第三步代码如下
//创建一个ApplicationContext对象,根据xml配置创建一个对象
//直接读取Spring的src目录下的配置文件的子类是ClassPathXmlApplicationContext
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
//在容器中取出对象
HelloWorldService helloWorldService = context.getBean("helloWorldService", HelloWorldService.class);
helloWorldService.say(); //调用这个对象中的方法
context.close(); //结束程序,可以关闭容器
4、使用sts开发spring程序
由于Spring的配置文件较多,基于Eclipse配置也比较复杂。为了提高开发的效率,建议使用STS开发工具开发,或者在Eclipse安装一个STS插件
通过STS插件,配置文件可以直接通过工具管理,不需要做过多的配置。
5、控制反转 IoC(Inversion of Control):代码的调用权(控制权)从调用方转移给被调用方(服务提供方)的设计模式称为控制反转
6、标签说明
(1)alias标签 作用:为已配置的bean设置别名
(2)bean标签:用于配置类,让spring框架启动的时候,创建该配置的类的对象,并且放在Spring容器(context)里面
属性:
name:声明对象名,如果不写,就是没有对象名
id:声明对象名,因为容器里面的对象名是不可以重复的。id比name更容易说明这一点。功能与name一样的
class:用于指定创建对象的类名
scope:作用域,Spring容器里面的需默认是单例的,Spring容器可以通过该属性指定对象是原型还是单例的,设定为 scope="prototype" 表示为原型,设定为 scope="singleton" 表示为单例
init-method:设置创建对象的时候,调用初始化方法
destroy-method:设置对象被回收时,调用注销的方法
7、实例化Bean的四种方式
(1)通过class直接创建 <bean name="customerService" class="cn.ong.service.CustomerService">
(2)通过静态方法工厂创建(了解)静态工厂类
(3)通过实体工厂创建(了解)实体工厂,注意create方法没有static
(4)内置FactoryBean工厂创建对象的实现,通过实现FactoryBean的接口创建工厂类对象。必须返回泛型指定的类型的对象,FactoryBean创建对象的应用场景,有这么一种情况,创建好的对象需要设置很多参数再返回。
8、Spring依赖注入(重点):就是属性不用new创建对象,通过配置文件的配置将Spring容器里面的对象注入给对应的属性
(1)set方法注入:使用<property></property>标签
一个property标签匹配一个set方法,所以注入的类的属性必须有set的方法
只要是标量类型(八种基本类(以及包装类)和String类型)可以使用value设置
如果非标量类型,必须使用ref引用对象
如非标量类型是的配置:
<property name="createDate"><!-- 创建一个Date对象返回给属性 -->
<bean class="java.util.Date"></bean>
</property>
或者这样配置:
<bean name="now" class="java.util.Date"></bean> <!-- 配置一个时间类 -->
<property name="createDate" ref="now"></property>
(2)构造方法注入 使用<constructor-arg name="" value=""></constructor-arg> 标签注入
index:通过下标指定字段属性,从0开始
type:指定类型,除非接收的类型是Object,否则不需要指定类型
name:指定对应的构建方法的参数名
value:指定标量类型的值
ref:引用容器里面的其他对象
如:
<constructor-arg name="name" value="李四"></constructor-arg>
<constructor-arg name="age" value="20"></constructor-arg>
<constructor-arg name="createDate" >
(3)p标签注入属性
p命名空间的作用,就是将<property标签配置的属性通过 标签属性的方式来配置
如:
<bean name="customerService" class="cn.ong.service.CustomerService" p:name="张三" p:age="20"
p:createDate-ref="now">
(4)注入集合数据
数组数据注入:使用<array></array>标签,设置一组数组的标量类型
<property name="myStrs">
<array>
<value>aa</value>
<value>bb</value>
</array>
</property>
ist集合:注入使用<list></list>标签
set集合:注入使用<set></set>标签
map集合数据注入:使用<map></map>标签 注意:这个的key和value写在标签里面
<property name="myMap">
<map>
<entry key="name" value="zhangsan"></entry>
<entry key="age" value="20"></entry>
<entry key="createDate"><bean class="java.util.Date"></bean></entry>
</map>
</property>
Properties集合:也是键值对,但是键值必须是String类型,使用<props></props>标签
注意:这个的key写在标签里面,value写在标签外面
<property name="myProps">
<props>
<prop key="name" >张三</prop>
<prop key="age">20</prop>
</props>
</property>
spring框架,配置文件放在源代码包里面的,需要加上classpath:开头
象这种#{} ${} *{}这个表达式统称OGNL表达式,
JSP里面称${} 为EL表达式
Spring里面:将#{} ${}称为Spring表达式
Mybatis里面 将#{} ${} 直接成OGNL表达式
9、获得Properties文件的值
Spring配置文件支持通过Properties文件的Key获得对应的值。实现该功能是通过
(1)PropertySourcesPlaceholderConfigurer指定Properties的路径
(2)通过${Key}来获得Properties文件对应Key的值
最后需要配置上这个标签:customer.properties 配置的文件名
<context:property-placeholder file-encoding="UTF-8" location="classpath:customer.properties"/>