Spring
什么是Spring
Spring是Java平台上一个开源应用框架,它为应用程序的开发提供了全面的基础设施支持。Spring专注于基础设施,这将使得开发者能更好的致力于应用开发而不用去关心底层的架构。
Spring框架本身并未强制使用任何特别的编程模式。从设计上看,Spring框架给予了Java程序员许多自由度,但同时对业界存在的一些常见问题也提供了规范的文档和易于使用的方法。
Spring框架的核心功能适用于任何Java应用。在基于Java企业平台上的大量Web应用中,积极的拓展和改进已经形成。而Spring的用途也不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度来说,任何Java应用都可以从Spring中获得好处。
构建企业级应用 的 轻量级框架
Spring优势
Spring框架能有效地组织中间层对象。 Spring框架实现了真正意义上的面向接口编程,可实现组件之间的高度解耦。 Spring所秉承的设计思想就是让使用Spring创建的那些应用都尽可能少的依赖于它的APIs。 使用Spring构建的应用程序易于进行单元测试。 Spring提高了代码的可重用性,它尽可能避免在程序中硬编码。 Spring为数据存取提供了一个一致的框架,简化了底层数据库的访问方式。
依赖注入和控制反转
什么是依赖注入和控制反转
依赖注入(Dependency Injection)和控制反转(Inversion Of Control)实际是同一个概念
在传统的程序设计中,通常由调用者来创建被调用者的实例,而在依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由Spring框架中的容器来负责,它通过开发者的配置来判断实例的类型,创建后再注入调用者。由于Spring容器负责创建被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入(Dependency Injection);而被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,因此称为控制反转(Inversion of Control)。
注入方式
属性注入,对象注入,集合注入
<bean id="student" class="com.ittx.spring03.Student">
<property name="name" value="张三"/>
<property name="number" value="1001"/>
<property name="grade" ref="grade"/>
<property name="scores">
<list>
<value>90</value>
<value>99</value>
<value>89</value>
<value>78</value>
</list>
</property>
<property name="courses">
<map>
<entry key="英语" value="89"></entry>
<entry key="语文" value="99"></entry>
<entry key="数学" value="87"></entry>
</map>
</property>
<property name="friends">
<set>
<value>张三</value>
<value>李四</value>
<value>王二</value>
</set>
</property>
<property name="pros">
<props>
<prop key="driver">org.mysql.jdbc.Dirver</prop>
<prop key="root">root</prop>
<prop key="password">123</prop>
</props>
</property>
</bean>
自动注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-autowire="byName">
<bean id="grade" class="com.ittx.spring06.Grade">
<property name="name" value="java1606"></property>
</bean>
<bean id="student" class="com.ittx.spring06.Student">
<property name="name" value="小明"/>
</bean>
</beans>
Spring生命周期
初始化 :init-method="init"
销毁:destroy-method="destory"
作用域
1、singleton 作用域
当一个bean的 作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把 一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都 将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中 只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时 候,spring的IOC容器中只会存在一个该bean。
配置实例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
或者
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>
2、prototype
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。 清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用 bean的后置处理器,该处理器持有要被清除的bean的引用。)
配置实例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>
或者
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>
读取配置文件
mysql.property文件在src下
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Resource res = context.getResource("classpath:mysql.property");
System.out.println(res.getFilename());
System.out.println(res.getDescription());
System.out.println(res.contentLength());
Struts2与Spring整合
-WebRoot
-lib
struts-spring-plugin-2.5.5.jar
spring-core
struts-core
-Web-INF
-|applicationContext.xml//Spring核心配置文件
-|web.xml
1.web.xml
(以前 手动 执行xml ApplicationContext ctx = new ClassPathXmlapplicationContext.xml//Spring核心配置文件)
创建监听器(自动执行webroot webinf 下的applicationContext.xml//Spring核心配置文件)
<listener>
<listenerClass>
org.springframework,web.context.ContextLoaderListener
</listenerClass>
</listenter>
2.spring的监听器通过context-param获取applicationContext.xml
<context-param>
<param-name>
struts.properties
struts.objectFactory=spring
什么是Spring
Spring是Java平台上一个开源应用框架,它为应用程序的开发提供了全面的基础设施支持。Spring专注于基础设施,这将使得开发者能更好的致力于应用开发而不用去关心底层的架构。
Spring框架本身并未强制使用任何特别的编程模式。从设计上看,Spring框架给予了Java程序员许多自由度,但同时对业界存在的一些常见问题也提供了规范的文档和易于使用的方法。
Spring框架的核心功能适用于任何Java应用。在基于Java企业平台上的大量Web应用中,积极的拓展和改进已经形成。而Spring的用途也不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度来说,任何Java应用都可以从Spring中获得好处。
构建企业级应用 的 轻量级框架
Spring优势
Spring框架能有效地组织中间层对象。 Spring框架实现了真正意义上的面向接口编程,可实现组件之间的高度解耦。 Spring所秉承的设计思想就是让使用Spring创建的那些应用都尽可能少的依赖于它的APIs。 使用Spring构建的应用程序易于进行单元测试。 Spring提高了代码的可重用性,它尽可能避免在程序中硬编码。 Spring为数据存取提供了一个一致的框架,简化了底层数据库的访问方式。
依赖注入和控制反转
什么是依赖注入和控制反转
依赖注入(Dependency Injection)和控制反转(Inversion Of Control)实际是同一个概念
在传统的程序设计中,通常由调用者来创建被调用者的实例,而在依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由Spring框架中的容器来负责,它通过开发者的配置来判断实例的类型,创建后再注入调用者。由于Spring容器负责创建被调用者实例,实例创建后又负责将该实例注入调用者,因此称为依赖注入(Dependency Injection);而被调用者的实例创建工作不再由调用者来创建而是由Spring来创建,因此称为控制反转(Inversion of Control)。
注入方式
属性注入,对象注入,集合注入
<bean id="student" class="com.ittx.spring03.Student">
<property name="name" value="张三"/>
<property name="number" value="1001"/>
<property name="grade" ref="grade"/>
<property name="scores">
<list>
<value>90</value>
<value>99</value>
<value>89</value>
<value>78</value>
</list>
</property>
<property name="courses">
<map>
<entry key="英语" value="89"></entry>
<entry key="语文" value="99"></entry>
<entry key="数学" value="87"></entry>
</map>
</property>
<property name="friends">
<set>
<value>张三</value>
<value>李四</value>
<value>王二</value>
</set>
</property>
<property name="pros">
<props>
<prop key="driver">org.mysql.jdbc.Dirver</prop>
<prop key="root">root</prop>
<prop key="password">123</prop>
</props>
</property>
</bean>
自动注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"
default-autowire="byName">
<bean id="grade" class="com.ittx.spring06.Grade">
<property name="name" value="java1606"></property>
</bean>
<bean id="student" class="com.ittx.spring06.Student">
<property name="name" value="小明"/>
</bean>
</beans>
Spring生命周期
初始化 :init-method="init"
销毁:destroy-method="destory"
作用域
1、singleton 作用域
当一个bean的 作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。换言之,当把 一个bean定义设置为singleton作用域时,Spring IOC容器只会创建该bean定义的唯一实例。这个单一实例会被存储到单例缓存(singleton cache)中,并且所有针对该bean的后续请求和引用都 将返回被缓存的对象实例,这里要注意的是singleton作用域和GOF设计模式中的单例是完全不同的,单例设计模式表示一个ClassLoader中 只有一个class存在,而这里的singleton则表示一个容器对应一个bean,也就是说当一个bean被标识为singleton时 候,spring的IOC容器中只会存在一个该bean。
配置实例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
或者
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>
2、prototype
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的 getBean()方法)都会产生一个新的bean实例,相当与一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了。不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用。 清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责。(让Spring容器释放被singleton作用域bean占用资源的一种可行方式是,通过使用 bean的后置处理器,该处理器持有要被清除的bean的引用。)
配置实例:
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>
或者
<beanid="role" class="spring.chapter2.maryGame.Role" singleton="false"/>
读取配置文件
mysql.property文件在src下
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Resource res = context.getResource("classpath:mysql.property");
System.out.println(res.getFilename());
System.out.println(res.getDescription());
System.out.println(res.contentLength());
Struts2与Spring整合
-WebRoot
-lib
struts-spring-plugin-2.5.5.jar
spring-core
struts-core
-Web-INF
-|applicationContext.xml//Spring核心配置文件
-|web.xml
1.web.xml
(以前 手动 执行xml ApplicationContext ctx = new ClassPathXmlapplicationContext.xml//Spring核心配置文件)
创建监听器(自动执行webroot webinf 下的applicationContext.xml//Spring核心配置文件)
<listener>
<listenerClass>
org.springframework,web.context.ContextLoaderListener
</listenerClass>
</listenter>
2.spring的监听器通过context-param获取applicationContext.xml
<context-param>
<param-name>
struts.properties
struts.objectFactory=spring