- 浏览: 117906 次
- 性别:
- 来自: 深圳
文章分类
最新评论
Spring的简单介绍
最近学习了Spring,所以把我学到滴和大家一起分享一下,偶做
了一点Spring简介的介绍,还有就是一些比较简单的例子,希望对学习
Spring的同学有所帮助。小小建议:如果学习Spring给大家推荐一下,可以
看看尚学堂的视频,还有一本叫《Sping in Action》这本书,挺不错。在这
里指写了使用Spring的IOC容器管理Bean. 一些比较简单的例子。还有Spring
的很多知识没有分解,请关注下一次分解。
一.Spring简介
Spring 在英文里面有春天的意思,Spring是一个开源框架。框架的主要优势
之一就是其分层架构,分层 架构允许选择使用哪一个组件,同时为 J2EE 应
用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能
由EJB(Enterprise JavaBean)完成的事情。然而,Spring的用途不仅限于服
务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都
可以从 Spring中受益。
1.1 Spring的特点
Spring是一个轻量级的IOC和AOP容器。
IOC: 反向控制,设计好的类交给系统去控制,而不是在你的类内部控制(容
器在实例化对象时主动将其依赖类注入给它)
AOP: 面向切面,讲业务逻辑从系统服务中分离,实现内聚开发。系统对象只
做其该做滴业务逻辑不负责其他系统问题(如事务和日志)
DI :依赖注入,即在运行期由容器将依赖关系注入到组件之中,是在运行期,
由Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法进
行设定。
1.2 依赖注入
依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它
对象)只会通过以下几种方式来实现:构造器的参数、工厂方法的参数,或
给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创
建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构
造器中指定依赖关系或则类似服务定位器(Service Locator)模式这3种自
主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制
反转(Inversion of Control, IoC) 名字的由来。
二、Spring中如何加载多个配置文件
1. 第一种,使用数组
ApplicationContext contex=new ApplicationContest(bew String
[“a1.xml”,”a2.xml”]);
2. 第二种,只用通配符
ApplicationContext contex=new ApplicationContest(”a*.xml”);
但此种方法只对文件系统中滴xml文件有效,针对jar包中的无效
3.第三种,引入
ApplicationContext contex = new ClassXmlApplicationContext
(“a1.xml”);
在al.xml中,执行resource为相对a1.xml路径的路径
*******************************************************************
**************************************
二:使用Spring的IoC容器管理Bean
目标:理解IOC原理;掌握Spring中使用依赖注入方式配置bean。
产品:MyEclipse 5.5、Tomcat 5.5
技术:spring
知识点:
•依赖注入的原理(控制反转)
•Spring中的依赖注入方式(2种)
•Spring中创建bean的3种方法
•bean高级特性深入
一、依赖注入的原理
什么是IOC?控制反转与依赖注入
对象依赖的使用
public class Chinese {
private Axe axe;
public void setAxe( Axe axe){
this.axe=axe;
}
public void useAxe() {
// TODO Auto-generated method stub
System.out.println(axe.chop());
}
public Chinese(){
System.out.println(“Chinese实例化!”);
}
}
传统方式的缺点
1、对象直接new,不灵活
2、对象不能被别的组件共享对象
3、对象直接new,如果new时报异常,异常范围扩大了
举例说明:依赖注入类似于,相亲
1)自己new 对象(传统方式)
2)由别人new对象,来找你(直接依赖注入)
3)由中介所为你提供一个对象(由工厂产生一个对象注入)
总结一下,大量组件生命周期和相互之间的关系有自己负责,就增加了系统
的复杂度,建议已装配的组装大量组件方式,把实例化好的对象注入进来。
改写程序
添加set方法,不需要关心对象的实例化和具体实现,可以实现共享,注
入的是接口,可以使用模拟实现来测试,不需要真实的数据库。
增加了业务层的模型
2、spring的两种容器
u BeanFactory
u ApplicationContext
通过XML配置
不用关心组件的装配和创建
ApplicationContext所有对象在读去XMl时都被new一次,而且以后不再new
3、Bean的作用域
通过scope指定
(默认)Singleton:仅一个实例
prototype:每次都创建一个新实例
4、ICO的依赖关系图
二、Spring中的依赖注入方式(2种)
构造方法注入:保证在一次性注入
设置属性注入:可以一次注入一个,对于复杂的依赖关系,构造的过于臃肿
。推荐值依赖注入,可以看到是依赖
<!– 默认在使用时,才注入依赖,也可以强制初始化bean,即设置
depends-on=”steelAxe”,提前注入–>
<bean id=”chinese1″ >
<!–设值注人:主要方式–>
<constructor-arg>
<ref local=”steelAxe”/>
</constructor-arg>
</bean>
<bean id=”stoneAxe”></bean>
<bean id=”steelAxe” ></bean>
三、Spring中创建bean的3种方法
u 调用构造器new一个bean实例
u 使用静态工厂
u 使用实例工厂
1、调用构造器new一个bean实例
<!– 默认在使用时,才注入依赖,也可以强制初始化bean,即设置depends
-on=”steelAxe”,提前注入–>
<bean id=”chinese1″ >
<!–设值注人:主要方式–>
<property name=”axe”>
<ref local=”steelAxe”/>
</property>
</bean>
<bean id=”stoneAxe”></bean>
<bean id=”steelAxe” ></bean>
2、使用静态工厂
工厂类
public class AxeFactory {
public static Axe getAxe(String msg){
if(msg.equals(“铁的”)){
return new StealAxe();
}else{
return new StoneAxe();
}
}
}
注意 : <constructor-arg>
<property>
applicationContext.xml
<bean id=”stoneaxe” factory-method=”getAxe”>
<constructor-arg>
<value>石头的</value>
</constructor-arg>
</bean>
<bean id=”stealaxe” factory-method=”getAxe”>
<constructor-arg>
<value>铁的</value>
</constructor-arg>
</bean>
<bean id=”chinese” scope=”prototype”>
<property name=”axe”>
<ref bean=”stealaxe”/>
</property>
</bean>
3、使用实例工厂
工厂类
public class AxeFactory {
public Axe getAxe(String msg){
if(msg.equals(“铁的”)){
return new StealAxe();
}else{
return new StoneAxe();
}
}
}
applicationContext.xml
<!–
<bean id=”stoneaxe” class=”dao.StoneAxe”/>
<bean id=”stealaxe” class=”dao.StealAxe”/>
–>
<bean id=”factory” class=”factory.AxeFactory”/>
<bean id=”stoneaxe” factory-bean=”factory” factory-method=”
getAxe”>
<constructor-arg>
<value>石头的</value>
</constructor-arg>
</bean>
<bean id=”stealaxe” factory-bean=”factory” factory-method=”
getAxe”>
<constructor-arg>
<value>铁的</value>
</constructor-arg>
</bean>
<bean id=”chinese” scope=”prototype”>
<property name=”axe”>
<ref bean=”stealaxe”/>
</property>
</bean>
四、bean特性深入
u 普通注入value值
注入基本类型:int,String 等
<property name=”email”><value>11</value></property>
u 注入引用类型ref(也可以使用bean子标签)
<property name=””><ref local=/></property>
<property name=””><ref bean=/></property>
bean可以用于确定不同xml文档中的对象,local确定同一个xml文档
u 注入null
<property name=”” ><null/></property>
u 注入List和数组
u 注入Set不能包含重复元素
u 注入Map
u 注入Properties
Chinese.java
public class Chinese{
//下面是系列集合属性,分别表示学校、成绩、健康和斧子
private List schools=new ArrayList();
private Map score=new HashMap();
private Properties health=new Properties();
private Set axes=new HashSet();
public Set getAxes() {
return axes;
}
public Properties getHealth() {
return health;
}
public List getSchools() {
return schools;
}
public Map getScore() {
return score;
}
public void setAxes(Set axes) {
this.axes = axes;
}
public void setHealth(Properties health) {
this.health = health;
}
public void setSchools(List schools) {
this.schools = schools;
}
public void setScore(Map score) {
this.score = score;
}
}
applicationContext.xml
<?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.0.xsd“>
<bean id=”chinese” >
<property name=”schools”>
<list>
<value>小学</value>
<value>中学</value>
<value>大学</value>
</list>
</property>
<property name=”score”>
<map>
<entry key=”数学”>
<value>87</value>
</entry>
<entry key=”英语”>
<value>89</value>
</entry>
<entry key=”语文”>
<value>82</value>
</entry>
</map>
</property>
<property name=”health”>
<props>
<prop key=”血压”>正常</prop>
<prop key=”身高”>175</prop>
</props>
</property>
<property name=”axes”>
<set>
<value>字符串斧子</value>
<bean/>
<ref local=”stoneAxe”/>
</set>
</property>
</bean>
<bean id=”stoneAxe”/>
</beans>
最近学习了Spring,所以把我学到滴和大家一起分享一下,偶做
了一点Spring简介的介绍,还有就是一些比较简单的例子,希望对学习
Spring的同学有所帮助。小小建议:如果学习Spring给大家推荐一下,可以
看看尚学堂的视频,还有一本叫《Sping in Action》这本书,挺不错。在这
里指写了使用Spring的IOC容器管理Bean. 一些比较简单的例子。还有Spring
的很多知识没有分解,请关注下一次分解。
一.Spring简介
Spring 在英文里面有春天的意思,Spring是一个开源框架。框架的主要优势
之一就是其分层架构,分层 架构允许选择使用哪一个组件,同时为 J2EE 应
用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能
由EJB(Enterprise JavaBean)完成的事情。然而,Spring的用途不仅限于服
务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都
可以从 Spring中受益。
1.1 Spring的特点
Spring是一个轻量级的IOC和AOP容器。
IOC: 反向控制,设计好的类交给系统去控制,而不是在你的类内部控制(容
器在实例化对象时主动将其依赖类注入给它)
AOP: 面向切面,讲业务逻辑从系统服务中分离,实现内聚开发。系统对象只
做其该做滴业务逻辑不负责其他系统问题(如事务和日志)
DI :依赖注入,即在运行期由容器将依赖关系注入到组件之中,是在运行期,
由Spring根据配置文件,将其他对象的引用通过组件的提供的setter方法进
行设定。
1.2 依赖注入
依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它
对象)只会通过以下几种方式来实现:构造器的参数、工厂方法的参数,或
给由构造函数或者工厂方法创建的对象设置属性。因此,容器的工作就是创
建bean时注入那些依赖关系。相对于由bean自己来控制其实例化、直接在构
造器中指定依赖关系或则类似服务定位器(Service Locator)模式这3种自
主控制依赖关系注入的方法来说,控制从根本上发生了倒转,这也正是控制
反转(Inversion of Control, IoC) 名字的由来。
二、Spring中如何加载多个配置文件
1. 第一种,使用数组
ApplicationContext contex=new ApplicationContest(bew String
[“a1.xml”,”a2.xml”]);
2. 第二种,只用通配符
ApplicationContext contex=new ApplicationContest(”a*.xml”);
但此种方法只对文件系统中滴xml文件有效,针对jar包中的无效
3.第三种,引入
ApplicationContext contex = new ClassXmlApplicationContext
(“a1.xml”);
在al.xml中,执行resource为相对a1.xml路径的路径
*******************************************************************
**************************************
二:使用Spring的IoC容器管理Bean
目标:理解IOC原理;掌握Spring中使用依赖注入方式配置bean。
产品:MyEclipse 5.5、Tomcat 5.5
技术:spring
知识点:
•依赖注入的原理(控制反转)
•Spring中的依赖注入方式(2种)
•Spring中创建bean的3种方法
•bean高级特性深入
一、依赖注入的原理
什么是IOC?控制反转与依赖注入
对象依赖的使用
public class Chinese {
private Axe axe;
public void setAxe( Axe axe){
this.axe=axe;
}
public void useAxe() {
// TODO Auto-generated method stub
System.out.println(axe.chop());
}
public Chinese(){
System.out.println(“Chinese实例化!”);
}
}
传统方式的缺点
1、对象直接new,不灵活
2、对象不能被别的组件共享对象
3、对象直接new,如果new时报异常,异常范围扩大了
举例说明:依赖注入类似于,相亲
1)自己new 对象(传统方式)
2)由别人new对象,来找你(直接依赖注入)
3)由中介所为你提供一个对象(由工厂产生一个对象注入)
总结一下,大量组件生命周期和相互之间的关系有自己负责,就增加了系统
的复杂度,建议已装配的组装大量组件方式,把实例化好的对象注入进来。
改写程序
添加set方法,不需要关心对象的实例化和具体实现,可以实现共享,注
入的是接口,可以使用模拟实现来测试,不需要真实的数据库。
增加了业务层的模型
2、spring的两种容器
u BeanFactory
u ApplicationContext
通过XML配置
不用关心组件的装配和创建
ApplicationContext所有对象在读去XMl时都被new一次,而且以后不再new
3、Bean的作用域
通过scope指定
(默认)Singleton:仅一个实例
prototype:每次都创建一个新实例
4、ICO的依赖关系图
二、Spring中的依赖注入方式(2种)
构造方法注入:保证在一次性注入
设置属性注入:可以一次注入一个,对于复杂的依赖关系,构造的过于臃肿
。推荐值依赖注入,可以看到是依赖
<!– 默认在使用时,才注入依赖,也可以强制初始化bean,即设置
depends-on=”steelAxe”,提前注入–>
<bean id=”chinese1″ >
<!–设值注人:主要方式–>
<constructor-arg>
<ref local=”steelAxe”/>
</constructor-arg>
</bean>
<bean id=”stoneAxe”></bean>
<bean id=”steelAxe” ></bean>
三、Spring中创建bean的3种方法
u 调用构造器new一个bean实例
u 使用静态工厂
u 使用实例工厂
1、调用构造器new一个bean实例
<!– 默认在使用时,才注入依赖,也可以强制初始化bean,即设置depends
-on=”steelAxe”,提前注入–>
<bean id=”chinese1″ >
<!–设值注人:主要方式–>
<property name=”axe”>
<ref local=”steelAxe”/>
</property>
</bean>
<bean id=”stoneAxe”></bean>
<bean id=”steelAxe” ></bean>
2、使用静态工厂
工厂类
public class AxeFactory {
public static Axe getAxe(String msg){
if(msg.equals(“铁的”)){
return new StealAxe();
}else{
return new StoneAxe();
}
}
}
注意 : <constructor-arg>
<property>
applicationContext.xml
<bean id=”stoneaxe” factory-method=”getAxe”>
<constructor-arg>
<value>石头的</value>
</constructor-arg>
</bean>
<bean id=”stealaxe” factory-method=”getAxe”>
<constructor-arg>
<value>铁的</value>
</constructor-arg>
</bean>
<bean id=”chinese” scope=”prototype”>
<property name=”axe”>
<ref bean=”stealaxe”/>
</property>
</bean>
3、使用实例工厂
工厂类
public class AxeFactory {
public Axe getAxe(String msg){
if(msg.equals(“铁的”)){
return new StealAxe();
}else{
return new StoneAxe();
}
}
}
applicationContext.xml
<!–
<bean id=”stoneaxe” class=”dao.StoneAxe”/>
<bean id=”stealaxe” class=”dao.StealAxe”/>
–>
<bean id=”factory” class=”factory.AxeFactory”/>
<bean id=”stoneaxe” factory-bean=”factory” factory-method=”
getAxe”>
<constructor-arg>
<value>石头的</value>
</constructor-arg>
</bean>
<bean id=”stealaxe” factory-bean=”factory” factory-method=”
getAxe”>
<constructor-arg>
<value>铁的</value>
</constructor-arg>
</bean>
<bean id=”chinese” scope=”prototype”>
<property name=”axe”>
<ref bean=”stealaxe”/>
</property>
</bean>
四、bean特性深入
u 普通注入value值
注入基本类型:int,String 等
<property name=”email”><value>11</value></property>
u 注入引用类型ref(也可以使用bean子标签)
<property name=””><ref local=/></property>
<property name=””><ref bean=/></property>
bean可以用于确定不同xml文档中的对象,local确定同一个xml文档
u 注入null
<property name=”” ><null/></property>
u 注入List和数组
u 注入Set不能包含重复元素
u 注入Map
u 注入Properties
Chinese.java
public class Chinese{
//下面是系列集合属性,分别表示学校、成绩、健康和斧子
private List schools=new ArrayList();
private Map score=new HashMap();
private Properties health=new Properties();
private Set axes=new HashSet();
public Set getAxes() {
return axes;
}
public Properties getHealth() {
return health;
}
public List getSchools() {
return schools;
}
public Map getScore() {
return score;
}
public void setAxes(Set axes) {
this.axes = axes;
}
public void setHealth(Properties health) {
this.health = health;
}
public void setSchools(List schools) {
this.schools = schools;
}
public void setScore(Map score) {
this.score = score;
}
}
applicationContext.xml
<?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.0.xsd“>
<bean id=”chinese” >
<property name=”schools”>
<list>
<value>小学</value>
<value>中学</value>
<value>大学</value>
</list>
</property>
<property name=”score”>
<map>
<entry key=”数学”>
<value>87</value>
</entry>
<entry key=”英语”>
<value>89</value>
</entry>
<entry key=”语文”>
<value>82</value>
</entry>
</map>
</property>
<property name=”health”>
<props>
<prop key=”血压”>正常</prop>
<prop key=”身高”>175</prop>
</props>
</property>
<property name=”axes”>
<set>
<value>字符串斧子</value>
<bean/>
<ref local=”stoneAxe”/>
</set>
</property>
</bean>
<bean id=”stoneAxe”/>
</beans>
发表评论
-
Hibernate
2011-11-07 22:19 0Hibernate是一个开放源代码的对象关系映射框架,它对JD ... -
jQuery好处
2011-11-07 22:14 0jQuery 是一个JavaScript 库,它有助于简化 J ... -
jquery
2011-11-07 22:10 0jquery 求助编辑百科名片 ... -
Hibernate缓存详解
2011-11-07 22:08 0hibernate缓存详解(2009-02-25 18:11: ... -
Hibernate二级缓存
2011-11-07 22:07 0很多人对二级缓存都不 ... -
Hibernate缓存
2011-11-07 22:06 624hibernate的缓存机制是用 ... -
AOP
2011-11-07 22:05 479AOP概念: 实现AOP有两种方式:1、采用Annoatio ... -
Spring装配
2011-11-07 21:59 2535在spring容器内拼凑bean叫作装配。装配bean的时候, ... -
S2与S1
2011-11-07 21:52 721— 在Action实现类方面的对比:Struts 1要求Act ...
相关推荐
spring简单介绍 导入spring包及描述spring aop ioc技术,以及applicationtext的配置情况
Spring简单介绍,AOP IOC Bean 常用注解
Spring的简单介绍及反转控制和依赖注入的代码演示
参考链接提供的CSDN博客文章《[Spring简单缓存实现](http://blog.csdn.net/maoyeqiu/article/details/50238035)》中,作者详细介绍了如何在Spring项目中实现缓存,包括配置、注解使用以及注意事项,是一个很好的学习...
- 实践上,可以先从创建一个简单的Spring项目开始,例如一个Hello World程序,体验Spring如何管理Bean和控制流程。 - 随着经验的积累,可以尝试更复杂的任务,如使用Spring MVC开发RESTful API,或者利用Spring ...
标题中的“Spring简单模拟Spring容器”意味着我们将探讨Spring框架的核心特性——IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入),以及如何通过编程方式模拟Spring容器的工作原理。...
Spring的数据访问层还包括对JPA(Java Persistence API)和JDO(Java Data Objects)的集成,以及声明式事务管理,使得事务处理变得简单且一致。 除此之外,Spring还提供了大量其他功能,如Spring Security用于安全...
《Spring3.0就这么简单》主要介绍了Spring3.0的核心内容,不仅讲解了Spring3.0的基础知识,还深入讨论了SpringIoC容器、SpringAOP、使用SpringJDBC访问数据库、集成Hibernate、Spring的事务管理、SpringMVC、单元...
Spring框架是中国Java开发领域中最广泛使用的轻量级框架之一,它以其依赖注入...这份"spring入门介绍PPT"将是你深入理解Spring的宝贵资源,通过它,你可以逐步掌握Spring的核心理念和技术,开启你的Spring开发之旅。
它利用Spring Boot的便捷性,使得开发分布式系统(如配置管理、服务发现、熔断机制、路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等)变得更加简单。Spring Cloud并不提供具体的...
本示例将简要介绍如何在Spring应用中实现AOP,通过实际的代码示例帮助理解其工作原理。 首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如...
单体架构vs微服务架构,dubbo与spring cloud对比,spring cloud整体架构,简单架构,eureka介绍,hystrix介绍, feign介绍,spring cloud config配置介绍,zuul配置中心介绍, spring cloud开发步骤,docker自动化...
本主题将深入探讨“简单Spring容器实现”,基于提供的标签“源码”和“工具”,我们将聚焦于Spring容器的原理及其简易实现。下面,我们先来理解Spring容器的核心概念,然后逐步探索其内部机制,并通过一个名为...
spring 3相关介绍文档,可以用来作为开发的简单参考书籍。
Spring框架不仅仅是一个简单的IoC容器,它还提供了大量中间层功能,如事务管理、数据访问对象(DAO)支持、AOP(面向切面编程)等。在事务管理方面,Spring提供了一种通用的事务策略,允许开发者在不同的持久化技术...
本教程将向您介绍Spring的基本概念、发展历程以及如何利用其核心特性——控制反转(IoC)和依赖注入(DI)来简化软件设计。 ### Spring框架概述 Spring是一个开源的Java平台,它主要为开发企业级应用提供了丰富的...
【课程介绍】:最新Java进阶...课程介绍及课程注意点.wmv--2.Spring简单介绍.wmv--3.Spring在软件三层架构中的位置.wmv--4.Spring模块介绍.wmv--5.Spring重要知识点梳理.wmv--6.插件安装.wmv--7.STS定制面板.wmv--
综上所述,"spring简单注解+log4j记录日志"这个主题涵盖了Spring框架中的注解使用、Log4j日志系统以及AOP的应用。通过学习这些内容,初学者可以更好地理解和实践Spring框架,同时提高代码的可维护性和调试效率。在...
在本教程中,我们将深入探讨"Spring简单项目源码(一)",这是一个专为初学者设计的示例,旨在帮助他们理解Spring框架的基础知识。Spring是Java开发中最流行的开源框架,以其依赖注入(Dependency Injection,DI)和...