Spring框架学习笔记01

1.spring介绍

(1)三层架构中spring位置

这里写图片描述

(2)spring一站式框架
1.正是因为spring框架性质是属于容器性质的.容器中装什么对象就有什么功能.所以可以一站式.
2.不仅不排斥其他框架,还能帮其他框架管理对象.
3.aop支持
4.ioc思想
5.spring jdbc
6.aop 事务
7.junit 测试支持

2.spring搭建

(1)导包

这里写图片描述

logging是日志包
log4j可选

这里写图片描述

(2)创建一个对象
package cn.itheima.bean;

public class User {

    private String name;
    private Integer age;
    private Car car;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}
(3)书写配置注册对象到容器
1.位置任意(建议放到src下),配置文件名任意(建议applicationContext.xml)
2.导入约束

这里写图片描述

这里写图片描述

<!-- 将user对象交给spring容器管理 -->
<!-- Bean元素:该元素描述需要spring容器管理的对象
     name:给被管理的对象取名,获得对象的时候根据该名称获得,名称可以重复,可以使用特殊字符
     class:被管理对象的完整类名
     id:与name属性一模一样,但是名称不能重复,并且不能使用特殊字符
     结论:尽量使用name属性 -->
<bean name="user" class="cn.itheima.bean.User"></bean>
(4)代码测试
@Test
//创建方式1:空参构造
public void fun1(){
    //1.创建容器对象
    ApplicationContext ac = new ClassPathXmlApplicationContext("/cn/itheima/b_create/applicationContext.xml");
    //2.向容器要user对象
    User u1 = (User) ac.getBean("user");
    //3.打印user对象
    System.out.println(u1);
}

3.spring概念

(1)思想
1.IOC

这里写图片描述

2.DI

这里写图片描述

(2)applicationContext&BeanFactory
1.BeanFactory接口
spring原始接口.针对原始接口的实现类功能较为单一
BeanFactory接口实现类的容器.特点是每次在获得对象时才会创建对象

2.ApplicationContext
每次容器启动时就会创建容器中配置的所有对象.并提供更多功能
从类路径下加载配置文件:ClassPathXmlApplicationContext
从硬盘绝对路径下加载配置文件:FileSystemXmlApplicationContext("d:/xxx/yyy/xxx")

3.结论:web开发中,使用applicationContext. 在资源匮乏的环境可以使用BeanFactory.

4.spring配置详解

(1)Bean元素
<!-- 将user对象交给spring容器管理 -->
<!-- Bean元素:该元素描述需要spring容器管理的对象
     name:给被管理的对象取名,获得对象的时候根据该名称获得,名称可以重复,可以使用特殊字符
     class:被管理对象的完整类名
     id:与name属性一模一样,但是名称不能重复,并且不能使用特殊字符
     结论:尽量使用name属性 -->
<bean name="user" class="cn.itheima.bean.User"></bean>
(2)Bean元素进阶
1.scope属性
 a.singleton(默认值):单例对象.被标识为单例的对象在spring容器中只会存在一个实例
 b.prototype:多例原型.被标识为多例的对象,每次再获得才会创建.每次创建都是新的对象.整合struts2时,ActionBean必须配置为多例的.
 c.request:web环境下.对象与request生命周期一致.
 d.session:web环境下,对象与session生命周期一致.

2.生命周期属性
a.配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.
b.配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.
<bean name="user" class="cn.itheima.bean.User" init-method="init" destroy-method="destroy"></bean>
(3)spring创建对象的方式
1.空参构造方式
<!-- 创建模式1:空参构造创建 -->
<bean name="user" class="cn.itheima.bean.User" init-method="init" destroy-method="destroy"></bean>

public User() {
    System.out.println("User对象空参构造");
    }
2.静态工厂(了解)
<!-- 创建方式2:静态工厂创建 
     调用UserFactory的createUser方法创建名为user2的对象-->
<bean name="user2" class="cn.itheima.b_create.UserFactory" factory-method="createUser"></bean>

public static User createUser(){
        System.out.println("静态工厂创建User");
        return new User();
    }
3.实例工厂(了解)
<!-- 创建方式3:实例工厂创建
      调用UserFactory的createUser2方法创建名为user3的对象  -->
<bean name="user3" factory-bean="userFactory" factory-method="createUser2"></bean>
<bean name="userFactory" class="cn.itheima.b_create.UserFactory"></bean>

public User createUser2(){
        System.out.println("实例工厂创建User");
        return new User();
    }
(4)spring的分模块配置
<!-- 导入其他spring配置 -->
<import resource="cn/itheima/b_create/applicationContext.xml"/>

5.spring属性注入

(1)注入方式
1.set方法注入
<!-- set方法注入 -->
<bean name="user" class="cn.itheima.bean.User">
    <!--值类型注入: 为User对象中名为name的属性注入tom值 -->
    <property name="name" value="tom"></property>
    <property name="age" value="18"></property>
    <!-- 引用类型注入: 为car属性注入下方配置的car属性-->
    <property name="car" ref="car"></property>
</bean>

<!-- 将Car对象配置到容器中 -->
<bean name="car" class="cn.itheima.bean.Car">
    <property name="carName" value="法拉利"></property>
    <property name="carColour" value="red"></property>
</bean>
2.构造函数注入
<!-- 构造函数注入 -->
<bean name="user2" class="cn.itheima.bean.User">
    <!-- name:指定构造函数的参数名
         index:指定参数的索引
         type: 指定参数的类型-->
    <constructor-arg name="name" index="0" type="java.lang.String" value="消炎"></constructor-arg>
    <constructor-arg name="car" index="1" ref="car"></constructor-arg>
</bean>
3.p名称空间注入
<!-- p名称空间注入  走set方法-->
<!-- 1:导入p名称空间 xmlns:p="http://www.springframework.org/schema/p" 
     2:使用p,属性完成注入
        |值类型:p:属性名="值"
        |对象类型:p:对象名-ref="bean名称"-->
<bean name="user3" class="cn.itheima.bean.User" p:name="lijisheng" p:age="24" p:car-ref="car"></bean>
4.spel注入
<!-- spel注入   Spring Expression Language   spring表达式语言 -->
<bean name="user4" class="cn.itheima.bean.User">
    <property name="name" value="#{user.name}"></property>
    <property name="age" value="#{user3.age}"></property>
    <property name="car" ref="car"></property>
</bean>
(2)复杂类型注入
1.数组
<!-- 如果数组中只准备注入一个值或对象,直接使用value|ref即可 -->
<!-- <property name="arr" value="lijisheng"></property> -->
<property name="arr">
    <array>
        <value>one</value>
        <value>two</value>
        <ref bean="user4"/>
    </array>
</property>
2.List
<!-- list类型注入 -->
<property name="list">
    <list>
        <value>jack</value>
        <value>rose</value>
        <ref bean="user"/>
    </list>
</property>
3.Map
<!-- map类型注入 -->
<property name="map">
    <map>
        <entry key="url" value="http://www.baidu.com"></entry>
        <entry key="user11111" value-ref="user4"></entry>
        <entry key-ref="user2" value-ref="user3"></entry>
    </map>
</property>
4.Properties
<!-- Properties类型注入 -->
<property name="prop">
    <props>
        <prop key="driverClass">http://www.baidu.com</prop>
        <prop key="username">root</prop>
        <prop key="password">root</prop>
    </props>
</property>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值