初识spring

一、什么是spring


Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE

Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。

EE开发分成三层结构:

* WEB层:Spring MVC.

*业务层:Bean管理:(IOC)

*持久层:Spring的JDBC模板.ORM模板用于整合其他的持久层框架.

Expert One-to-One J2EE Design andDevelopment:J2EE的设计和开发:(2002.EJB)

Expert One-to-One J2EE Development withoutEJB:J2EE不使用EJB的开发.

2.学习Spring的优势

方便解耦,简化开发

Spring  就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理

AOP编程的支持

Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控的功能

声明式事物的支持

只需要通过配置就可以完成对事物的管理,而无需手动编程。

方便程序的测试

Spring对Junit4支持,可以通过注解方便的测试Spring程序

方便集成各种优秀的框架

Spring不排斥各种优秀的开源框架,其内部提供了各种优秀框架(struts2、Hibernate)的直接支持

降低JavaEE API的使用难度

Spring对javaee开发中非常难用的一些API,都提供可封装。是用难度降低。


IOC:Inversion of

Control控制反转.指的是对象的创建权反转(交给)给Spring.

作用是实现了程序的解耦合.

3.使用Spring

3.1下载Spring开发包

http://spring.io/

3.2创建WEB项目,导包


lQ�

1.1.1.1步骤三:引入相关配置文件:

log4j.properties

applicationContext.xml

引入约束:

spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

1.1.1.2步骤四:编写相关的类:

publicinterfaceUserDao {

publicvoidsayHello();

}

publicclassUserDaoImplimplementsUserDao {

@Override

publicvoidsayHello() {

System.out.println("Hello

Spring...");

}

}

1.1.1.3步骤五:完成配置:


"userDao"class="cn.itcast.spring.demo1.UserDaoImpl">

1.1.1.4步骤六:编写测试程序:

@Test

// Spring的方式:

publicvoiddemo2(){

//创建Spring的工厂类:

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

//通过工厂解析XML获取Bean的实例.

UserDaouserDao= (UserDao)applicationContext.getBean("userDao");

userDao.sayHello();

}

1.1.1.5IOC和DI:

IOC:控制反转,将对象的创建权交给了Spring.

DI:DependencyInjection依赖注入.需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去.

1.1.2Spring中的工厂:

1.1.2.1ApplicationContext:

ApplicatioContext接口有两个实现类:

ClassPathXmlApplicationContext:加载类路径下Spring的配置文件.

FileSystemXmlApplicationContext:加载本地磁盘下Spring的配置文件.

1.1.2.2BeanFactory:

1.1.2.3BeanFactory和ApplicationContext的区别:

BeanFactory:是在getBean的时候才会生成类的实例.

ApplicationContext:在加载applicationContext.xml时候就会创建.

1.1.3配置STS的XML的提示:

1.1.3.1Spring配置文件中提示的配置

复制路径:

*http://www.springframework.org/schema/beans/spring-beans.xsd

查找XML Catalog:

点击Add..

1.1.4Spring的相关配置:

1.1.4.1id属性和name属性标签的配置

id:Bean起个名字.在约束中采用ID的约束:唯一.必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号id:不能出现特殊字符.

name:Bean起个名字.没有采用ID的约束.name:出现特殊字符.如果没有id的话, name可以当做id使用.

*整合struts1的时候:

1.1.4.2scope属性:Bean的作用范围.

* singleton:默认值,单例的.

* prototype:多例的.

* request:WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.

* session:WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.

* globalSession:WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

1.1.4.3Bean的生命周期的配置:

通过配置标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。

销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

1.1.5Spring的Bean的管理XML的方式:

1.1.5.1Spring的Bean的属性注入:

【构造方法的方式注入属性】


"car"class="cn.itcast.spring.demo4.Car">

undefined"name"value="保时捷"/>undefined

undefined"price"value="1000000"/>undefined

【set方法的方式注入属性】


"car2"class="cn.itcast.spring.demo4.Car2">

"name"value="奇瑞QQ"/>

"price"value="40000"/>

1.1.5.2Spring的属性注入:对象类型的注入:


"person"class="cn.itcast.spring.demo4.Person">

"name"value="会希"/>


"car2"ref="car2"/>

1.1.5.3名称空间p的属性注入的方式:Spring2.x版本后提供的方式.

第一步:引入p名称空间

xmlns:p="http://www.springframework.org/schema/p"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">

第二步:使用p名称空间.

*普通属性:p:属性名称=””

*对象类型属性:p:属性名称-ref=””


p:price="1200000"/>

1.1.5.4SpEL的方式的属性注入:Spring3.x版本后提供的方式.

SpEL:Spring Expression Language.

语法:#{ SpEL }


"car2"class="cn.itcast.spring.demo4.Car2">

"name"value="#{'奔驰'}"/>

"price"value="#{800000}"/>

引用了另一个类的属性


1.1.5.5注入复杂类型:


"collectionBean"class="cn.itcast.spring.demo5.CollectionBean">


"arrs">

会希

冠希

天一


"list">

芙蓉

如花

凤姐


"map">

"aaa"value="111"/>

"bbb"value="222"/>

"ccc"value="333"/>


"properties">

"username">root

"password">123

1.1.5.6Spring的分配置文件的开发

一种:创建工厂的时候加载多个配置文件:

ApplicationContext applicationContext = newClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

二种:在一个配置文件中包含另一个配置文件:

1.2案例代码

1.2.1搭建环境:

1.2.1.1创建web项目,引入jar包.

WEB层使用Struts2:

* Struts2开发的基本的包

Spring进行Bean管理:

*Spring开发的基本的包

1.2.1.2引入配置文件:

Struts2:

*web.xml

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

*struts.xml

Spring:

*applicationContext.xml

*log4j.properties

1.2.1.3引入页面:

1.2.1.4创建包结构和类:

1.2.1.5在添加页面提交内容到Action:

1.2.1.6改写Action类并配置Action:

"crm"extends="struts-default"namespace="/">

"customer_*"class="cn.itcast.crm.web.action.CustomerAction"method="{1}">

1.2.1.7在Action调用业务层:

将业务层类配置到Spring中:

在Action中获取业务层类:

publicString save(){

System.out.println("Action中的save方法执行了...");

System.out.println(customer);

//传统方式:

/*CustomerService customerService = new CustomerServiceImpl();

customerService.save(customer);*/

// Spring的方式进行操作:

ApplicationContextapplicationContext=newClassPathXmlApplicationContext("applicationContext.xml");

CustomerServicecustomerService= (CustomerService)applicationContext.getBean("customerService");

customerService.save(customer);

returnNONE;

}

****每次请求都会创建一个工厂类,服务器端的资源就浪费了,一般情况下一个工程只有一个Spring的工厂类就OK了.

*将工厂在服务器启动的时候创建好,将这个工厂放入到ServletContext域中.每次获取工厂从ServletContext域中进行获取.

*ServletContextLinstener:监听ServletContext对象的创建和销毁.

1.2.2Spring整合WEB项目

1.2.2.1引入spring-web.jar包:

配置监听器:

org.springframework.web.context.ContextLoaderListener

contextConfigLocation

classpath:applicationContext.xml

1.2.2.2改写Action:

/**

*保存客户的执行的方法:save

*/

publicString save(){

//传统方式:

/*CustomerService

customerService = new CustomerServiceImpl();

customerService.save(customer);*/

// Spring的方式进行操作:

/*ApplicationContext

applicationContext = new

ClassPathXmlApplicationContext("applicationContext.xml");

CustomerService customerService = (CustomerService)

applicationContext.getBean("customerService");*/

WebApplicationContextapplicationContext=WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());

CustomerServicecustomerService= (CustomerService)applicationContext.getBean("customerService");

System.out.println("Action中的save方法执行了...");

System.out.println(customer);

customerService.save(customer);

returnNONE;

}

1.2.2.3编写Dao并配置:

1.2.2.4业务层调用DAO:

publicclassCustomerServiceImplimplementsCustomerService {

privateCustomerDaocustomerDao;

publicvoidsetCustomerDao(CustomerDaocustomerDao) {

this.customerDao=customerDao;

}

}

��

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容