Spring框架的基础学习

Spring是什么?
spring是一个一栈式的分层结构,轻量级开源框架,目前最受欢迎的框架,spring框架可以被理解为管理对象的管家,帮助我们创建管理项目中要用到的对象
Spring的特点:
1.是一个开源框架
2.是一个轻量级的框架,体积很小,依赖的jar包很少
3.分层结构
4.一栈式
5.IOC思想:即反转控制思想,将对象的创建管理反转给spring框架,我们不需要再手动创建,直接从spring框架的容器中来获取即可,IOC的实现原理:java的反射机制 和 配置信息
6.DI技术:(dependency(依赖) injection (注入)):外部将需要的对象注入内部,我们称之为注入
Spring的好处:
1.降低了复杂性
2.低耦合
3.高性能
4.易测试
5.声明式事务
创建spring 的步骤:
1.导入依赖的jar包
2.创建spring的编译文件(配置编译文件,将要创建的对象注册)
3.通过编译文件来创建容器applicationContext,并生成配置文件中的对象
4.通过getBean来获取容器中的对象
spring创建对象的方式有三种:
1.通过对象的无参构造方法来创建对象(使用这种方法,一定要保证对象中有无参构造方法)
2.通过静态工厂构造对象
3.通过实例工厂来构造对象
例如:我们通过spring来生成一个person类的对象
1.通过无参数构造方法

//person类
public class Person {
private String username;
private String password;

}

//配置的spring的编译文件
<?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.xsd">
    <!-- name代表的是要创建的对象名 class代表的是创建对象的全限定路径 后面没有method,则就默认是调用类中的无参数构造方法 -->
<bean name="person" class="com.lanou.spring.Person"></bean>
</beans>

//在测试文件中测试
//创建spring中的装对象的容器,容器创建完毕后,配置文件中的所有对象全部创建完毕
//通过类路径来创建容器
ApplicationContext ac  =
   new  ClassPathXmlApplicationContext("classpath:applicationContext");
   //这种方式是通过文件路径来创建容器的
ApplicationContext ac1 = new FileSystemXmlApplicationContext("file:/Users/lanou/JavaWeb/sh-spring-01/src/ContextBeans.xml");
//从容器中获取创建好的对象
Person person = (Person)ac.getBean("person");

2.通过静态工厂模式来创建对象

//工厂类
public class PersonFactory {
//工厂中静态获取person的方法
public static Person getPerson() {
      return new Person();
}
}
//在spring配置文件中
<bean name="person1" class="com.lanou.spring.PersonFactory" factory-method="getPerson"></bean>

3.通过实例工厂来创建对象

public class PersonFactory {
//工厂中的实例方法
public  Person getPerson() {
      return new Person();
}

//在spring配置的编译文件中
//先生成一个工厂类中的实例对象
<bean name="factory" class="com.lanou.spring.PersonFactory"></bean>
//在通过工厂类对象调用类中的getPerson方法来生成对象
<bean name="person2" class="com.lanou.spring.PersonFactory" factory-method="getPerson" factory-bean="factory"></bean>

通过上述的三种方法可以创建出对象,这就是IOC思想的运用
DI技术的运用:即通过配置文件向创建的对象中注入值
注入值的方式有四种:
1.set注入:通过set注入赋值的对象的类中要有set方法
2.有参构造方法注入:这种方法的运用要保证对象的类中有对应的有参数构造方法
3.p命名空间注入:这需要我们给引入的标签库起个别名
4.SpEL表达式来对对象中的属性进行赋值

//1.通过set注入进行赋值,一定要保证类中有set方法
<bean name="person" class="com.lanou.spring.Person">
<property name="username" value="张三"></property>
<property name="password" value="123"></property>
</bean>

2.通过有参构造方法来进行赋值
因为一个类中可以有很多个有参构造函数,因为根据方法的重载:参数的个数,参数的数据类型,参数的顺序不同都会造成方法的重载,所有我们在通过方法的重载的时候需要指定一下参数的index下脚标,type:参数的数据类型

<bean name="person" class="com.lanou.spring.Person">
<constructor-arg name="name" value="张三" index="0" type="java.lang.String"></constructor-arg>
<constructor-arg name="word" value="123" index="1" type="java.lang.String"></constructor-arg>
</bean>

3.通过p命名空间来进行注入值
我们需要对引入的标签库进行设置别名

<bean id="person" class="com.lanou.spring.Person"
p:username = "张三" p:password = "123">
</bean>

4.通过SpEL表达式来进行赋值

<bean id="person" class="com.lanou.spring.Person">
<property name="username" value="张三"></property>
<property name="password" value="123456"></property>
</bean>
//SpEL表达式就是通过#{}然后利用对象导航,找到{}中对象的值来进行赋值
<bean id="person1" class="com.lanou.spring.Person">
<property name="username" value="#{person.username}"></property>
</bean>

在Spring中是一共有两种类型的容器用来保存配置文件中创建的对象
1.BeanFactory,是个接口,是spring最原始的容器,XMLBeanFactory是BeanFactory的实现类,该接口的最大特点就是配置文件中的对象只会在getBean的时候才会创建出来
2.applicationContext:也是一个接口,它的实现类是ClasspathXmlApplicationContext和FileSystemXmlApplcationContext,当容器创建的时候,spring就会根据配置文件来将所有的对象都创建出来并保存到容器中

Resource resource = new FileSystemResource("/Users/lanou/JavaWeb/sh-spring-01/src/ContextBeans.xml") ;
        XmlBeanFactory beanFactory = new XmlBeanFactory(resource);

配置文件中的一些常用到的属性:
1.scope :scope是给对象添加作用范围的
,scope的值是一共有四个:①singleton:单例,spring的整个生命周期中只会创建一次
,一般默认的scope就是singleton
②prototype:每次调用getBean方法的时候都会重新创建一次
③request:生命周期和request域的生命周期一样
④session:生命周期和session的生命周期一致
2.init-method 和 destory-method方法来设置一个对象的生命周期

//表示的是person对象在创建的时候会调用init方法,销毁的时候会自动调用destory方法
<bean id="person" class="com.lanou.spring.Person" init-method="init" destroy-method="destory"></bean>

比较复杂的对象进行数据注入:例如一个对象中包含一个数组,list集合和map集合,property集合

<bean id="collection1" class="com.lanou.spring.Collections">
<property name="cars">
<array>
    <value></value>
</array>
</property>
<property name="list">
<list>
    <value>1</value>
    <value>2</value>
</list>
</property>
<property name="map">
    <map>
        <entry key="1" value="123"></entry>
    </map>
</property>
<property name="props">
    <props>
        <prop key="1">123</prop>
    </props>
</property>
</bean>

配置文件的模块化:当一个配置文件内容太多时,可以将其按照功能模块划分,然后将其进行合并
合并方式1.在创建容器的时候,传入多个字符串对象(配置文件名)
合并方式2.在xml配置文件中通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值