spring基于xml标签详解

一、Spring介绍
在日常开发过程中经常会提到三大框架(SSM)指的是Spring、SpringMVC、MyBatis。其中一个非常重要的框架就是Spring。Spring目前隶属于皮沃托公司,Spring在刚刚出来的时候只有Spring Framework一款产品。我们习惯性的简称它为Spring,但是发展到现在Spring旗下已经有非常非常多的框架了,例如:SpringBoot、SpringCloud、SpringData、SpringSecurity等等。但是我们还是习惯性成将Spring Framework成为Spring。
二、Spring到底是什么框架
Spring它并不想Mybatis专门去解决某一个层面的问题,它在项目成扮演的是一个管理者的角色,负责对我们的项目中的对象进行管理,包括创建、注入、代理等等。实现了一个解耦的目的。Spring在管理对象时会将对象存储起来,所以Spring我们也可以将它看成一个容器。
三、Spring的两大核心能力
IOC:Inverse Of Control(控制反转),从前我们的项目中对象的管理创建是由程序员自己来处理,但是Spring框架会代替我们对对象进行创建和管理。控制权从我们手中转移到了Spring框架,所以称为控制反转。
DI(Dependency Injection):依赖注入,Spring在创建对象时还会将对象中所依赖的其他数据或者对象注入到 相应的属性上。
IOC和DI很容易混淆,IOC包含了DI的,IOC是目的,DI是过程。
AOP:(Aspect Oriented Programming)面向切面编程。留到后面详细讲解。
四、SpringIOC
使用Spring首先要引入依赖,Spirng框架下有很多依赖。在使用maven下载依赖时,只需要通过顶端依赖spring-context开始就可以下载到其他所有的依赖。
准备工作:
新建maven普通java项目
在pom.xml中通过spring-context的坐标下载spring的相关依赖:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

Spring容器类型:
容器的顶端是ApplicationContext,在它下面有三个常用的实现类。
ClassPathXmlApplicationContext:通过配置在classpath下的一个xml文件来完成容器初始化。
AnnotationConfigApplicationContext:通过扫描注解初始化容器
WebApplicationContext:在WEB环境下使用的Spring容器
FileSystemApplication:通过外部XML文件完成容器的初始化
配置版的IOC:
初始化容器的API:

  ApplicationContext ac=new ClassPathXmlApplicationContext("配置文件的名称");

**配置版的IOC是用过一个XML文件描述bean信息。
1.在项目的resources目录下新建一个xml文件,名为applicationContext.xml,该文件就是spring的核心配置文件,Spring会解析该文件获得必要信息,然后进行IOC的工作。
2.在applicationContext.xml中添加beans根标签,并且在benas标签中添加一个xml的schema约束(类似于DTD)。

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
    
</beans>

3.通过配置创建对象
● 通过无参构造创建对象(Spring默认的方式,也是最常用的方式)如下:

<bean id="对象的唯一ID" class="要创建的对象的类型"></bean>

● 选择构造方法创建对象
当我们的类具备多种构造函数时,我们可以通过spring选择某一个构造函数来完成对象的创建,具体的方式就是通过bean标签下的constructor-arg标签来完成配置。例如:

public class Service {
    public Service(){
        System.out.println("无参构造创建");
    }
    public Service(int a){
        System.out.println("单参构造创建");
        System.out.println(a);
    }
    public Service(String a,String b){
        System.out.println("双参构造创建");
    }
    public void checkUser(){
        System.out.println("执行业务层");
    }
}
<bean id="s1" class="com.woniuxy.service.Service">
        <constructor-arg><value>小鑫科技</value></constructor-arg>
        <constructor-arg><value>小鑫科技</value></constructor-arg>
</bean>

按照上述方式配置,最终spring会选择双参构造方法来完成对象的创建。
● 通过工厂模式创建对象
首先通过一个bean标签创建一个工厂对象(工厂类自己编写)

<bean id="factory" class="com.woniuxy.util.ConnectionHelper"></bean>

通过bean标签调用工厂对象的工厂方法来创建目标对象

<bean id="conn" factory-bean="factory" factory-method="openConnection"></bean>

● 通过静态工厂模式创建对象
通过bean标签class的值为工厂的类路径,再通过静态工厂方法的方法名来完成对象的创建

<bean id="conn" class="com.woniuxy.util.ConnectionHelper" factory-method="openConnection"></bean>

4.设置对象的单例或非单例
通过spring创建对象时,可以选择使用单例或者是非单例模式。spring默认情况是创建对象采用的是单例模式。
要配置单例或者多例需要使用bean标签中的scope属性。
scope属性可选值:
singleton(默认):单例
prototype:多例
request:web环境中生效,在一次请求中无论你getBean多少次,获取的对象都是同一个
session:web环境中生效,在一次会话中无论你geyBean多少次,获取的对象都是同一个
在这里插入图片描述
5.通过配置完成依赖注入
● 注入基本数据类型
在需要注入属性的对象的bean标签下,通过property子标签完成依赖注入,name表示需要注入值的属性的名称,value需要注入的值。

<bean id="d1" class="com.woniuxy.dao.Dao">
        <property name="a" value="14"></property>
        <property name="b" value="小鑫科技"></property>
</bean>

相对应的需要类中为属性提供set方法,因为配置方式进行依赖注入是同set方法完成赋值的
在这里插入图片描述
● 注入对象
在需要注入属性的对象的bean标签下,通过property子标签完成依赖注入,name表示需要注入值的属性的名称,ref表示要注入的对象在spring容器中的ID。

  <bean id="s1" class="com.woniuxy.service.Service" scope="prototype">
        <constructor-arg><value>1</value></constructor-arg>
        <constructor-arg><value>2</value></constructor-arg>
        <property name="dao" ref="d1"></property>
 </bean>

同样的在被注入的类中需要定义相应的属性并提供set方法
在这里插入图片描述
● 注入集合

<bean id="d1" class="com.woniuxy.dao.Dao">
  <property name="a" value="14"></property>
  <property name="b" value="小鑫科技"></property>
  <property name="list">//对应了类中的List
    <list>
      <value>小鑫科技</value>
      <value>小鑫科技</value>
      <value>小鑫科技</value>
    </list>
  </property>
</bean>

● 注入键值对

<bean id="d1" class="com.woniuxy.dao.Dao">
        <property name="a" value="14"></property>
        <property name="b" value="小鑫科技"></property>
        <property name="list">
            <list>
                <value>小鑫科技</value>
                <value>小鑫科技</value>
                <value>小鑫科技</value>
            </list>
        </property>
        <property name="map">//对应了类中的Map
            <map>
                <entry>
                    <key>
                        <value>a</value>
                    </key>
                    <value>小鑫科技</value>
                </entry>
            </map>
        </property>
</bean>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值