初识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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值