详谈Spring框架的搭建

什么是Spring的IOC和DI?

IOC :控制反转,将对象的创建权交给了 Spring.
DI :全称:Dependency Injection 依赖注入.需要有 IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依
赖的属性设置进去.

开始搭建Spring基础框架

下载 Spring

下载地址:http://repo.springsource.org/libs-release-local/org/springframework/spring/
解压后得到:
* docs :API 和开发规范.
* libs :jar 包和源码.
* schema :约束.

搭建spring需要的jar包

1.com.springsource.org.apache.commons.logging-1.1.1.jar ——–>spring日志需要依赖的包
2.com.springsource.org.apache.log4j-1.2.15.jar ———->老版本spring依赖的包
3.spring-beans-4.2.4.RELEASE.jar ——->spring框架依赖的基础包
4.spring-context-4.2.4.RELEASE.jar ——->spring框架依赖的基础包
5.spring-core-4.2.4.RELEASE.jar ——->spring框架依赖的基础包
6.spring-expression-4.2.4.RELEASE.jar ——->spring框架依赖的基础包

引入相关配置文件

log4j.properties ——>src路径下(这是配置日志文件用的,可不加)
applicationContext.xml ——>src路径下或其它包下都可以

spring 配置文件中的提示配置 —-ecplise下

复制路径: http://www.springframework.org/schema/beans/spring-beans.xsd
查找 XML Catalog:
添加约束文件路径:
spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configur
ation.html

在applicationContext.xml需要引入的约束
<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.xsd">
</beans>

spring 中的工厂

1.ApplicatioContext 接口有两个实现类:
ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件.
FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件.
ApplicationContext :在加载 applicationContext.xml(容器启动)时候就会创建.
2.BeanFactory( 过时)
BeanFactory :是在 getBean 的时候才会生成类的实例.

Spring 的相关配置

id  属性和 name  属性 标签的配置
id :Bean 起个名字.  在约束中采用 ID 的约束:唯一. 必须以字母开始,可以使用字母、数字、连字符、
下划线、句话、冒号 id:不能出现特殊字符.
<bean id=”user”>
name:Bean 起个名字.  没有采用 ID 的约束. name:出现特殊字符.如果<bean>没有 id 的话 , name 可
以当做 id 使用.
* 整合 struts1 的时候:
<bean name=”/userAction” >

对象创建的方式

1.空参构造方法创建的
applicationContext.xml配置如下:
<bean  name="user" class="com.qiu.bean.User"></bean>
//com.qiu.bean.User//bean路径

2.静态工厂的创建(作为了解)
bean对象如何写:
public static User createUser(){
        return new User();
    }
xml如何写:
<bean  name="user2" 
        class="com.qiu.b_create.UserFactory" 
        factory-method="createUser" ></bean>

3.实列工厂的创建(作为了解)
bean对象如何写:
public  User createUser2(){
        return new User();
    }
xml如何写:
<bean  name="user3" 
        factory-bean="userFactory"
        factory-method="createUser2" ></bean>

    <bean  name="userFactory" 
        class="com.qiu.b_create.UserFactory"></bean>



scope 属性:Bean

  • singleton :默认值,单例的.
  • prototype :多例的.
  • request :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中.
  • session :WEB 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中.
  • globalSession :WEB 项目中,应用在 Porlet 环境.如果没有 Porlet 环境那么 globalSession 相当
    于 session.

Bean 的生命周期的配置

通过配置<bean>标签上的 init-method 作为 Bean 的初始化的时候执行的方法,配置 destroy-method
作为 Bean 的销毁的时候执行的方法。
销毁方法想要执行,需要是单例创建的 Bean 而且在工厂关闭的时候,Bean 才会被销毁.
<bean  name="user" class="cn.itcast.bean.User"
         init-method="init" destroy-method="destory"></bean>

init --->初始化方法
destory --->销毁方法

Spring 的Bean的属性注入:

set 方法的方式注入属性

<bean id="car1" class="com.qiu.spring.demo.Car1">
<property name="name" value=" 奇瑞 QQ"/>
<property name="price" value="40000"/>
</bean>

对象类型的注入:

<!-- 注入对象类型的属性 -->
<bean id="person" class="com.qiu.spring.demo.Person">
<property name="name" value=" 会希 "/>
<!-- ref 属性:引用另一个 bean 的 id 或 name -->
<property name="car1" ref="car1"/>
</bean>

构造函数注入

<bean name="user" class="com.qiu.bean.User">
<constructor-arg name="name" value="jerry"></constructor-arg>//里面可以加个index属性,如果有构造函数重载的话可以,指定先后顺序。
<constructor-arg name="car" value="car"></constructor-arg>里面可以加个type属性,指定参数的类型。
</bean>

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

第一步:引入 p 名称空间
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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.xsd">
第二步:使用 p 名称空间.
* 普通属性: p:属性名称=””
* 对象类型属性:  p:属性名称-ref=””

<!-- p 名称空间的属性注入的方式 -->
<bean  id="car2"  class="com.qiu.spring.demo.Car2"  p:name="奥迪"
p:price="1200000"/>
<bean  id="person"  class="com.qiu.spring.demo.Person"  p:name="张三 "
p:car2-ref="car2"/>

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

SpEL:Spring Expression Language.
语法:#{ SpEL }
<!-- SpEL 的注入的方式 -->
<bean id="car2" class="com.qiu.spring.demo4.Car2">
<property name="name" value="#{' 奔驰 '}"/>
<property name="price" value="#{800000}"/>
</bean>
<bean id="person" class="com.qiu.spring.demo4.Person">
<property name="name" value="#{'万三'}"/>
<property name="car2" value="#{car2}"/>
</bean>
<bean id="carInfo" class="com.qiu.spring.demo4.CarInfo"></bean>
<!--引用了另一个类的属性-->
<bean id="car2" class="com.qiu.spring.demo4.Car2">
<!-- <property name="name" value="#{'奔驰'}"/> -->
<property name="name" value="#{carInfo.carName}"/>
<property name="price" value="#{carInfo.calculatePrice()}"/>
</bean>

注入复杂类型:

<!-- Spring 的复杂类型的注入===================== -->
<bean id="collectionBean" class="com.qiu.spring.demo5.CollectionBean">
<!-- 数组类型的属性 -->
<property name="arrs">
<list>
<value>李四</value>
<value>李希</value>
<value>王二</value>
</list>
</property>
<!-- 注入 List 集合的数据 -->
<property name="list">
<list>
<value>芙蓉</value>
<value>如花</value>
<value>凤姐</value>
</list>
</property>
<!-- 注入 Map 集合 -->
<property name="map">
<map>
<entry key="aaa" value="111"/>
<entry key="bbb" value="222"/>
<entry key="ccc" value="333"/>
</map>
</property>
<!-- Properties 的注入 -->
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">123</prop>
</props>
</property>
</bean>

Spring分配置文件的开发

//但在真实开发时我们不可能把所有配置都写在同一个配置文件里,接下来我们就要再写一个配置文件,只需在主文件里引入即可。
##spring分模块配置

一种:创建工厂的时候加载多个配置文件:
ApplicationContext  applicationContext  =  new
ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");
<!-- 导入其他spring配置文件 -->
    <import resource="xxxx.xml"/>

以上就是Spring框架基本搭建

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值