Spring配置文件

Bean

Bean标签的基本配置

添加到资源的配置文件(xml)中,调用类中无参构造函数
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"></bean>
id:Bean实例在Spring容器中的唯一标识
class:Bean的全限定名称

Bean标签范围配置

scope:指对象的作用范围

  • 取值为singleton
    Bean实例化个数:1
    Bean实例化时机:当Spring核心文件被加载时,实例化配置Bean
    Bean生命周期:容器存在,对象存活;应用卸载,容器销毁,对象销毁;
  • 取值为prototyped
    Bean实例化个数:多个
    Bean实例化时机:当调用getBean()方法时,实例化Bean
    Bean生命周期:对象被使用,一直存活;长期不使用,被GC回收


    2021-04-01_170936.jpg

Bean生命周期配置

  • init-method:指定类中的初始化方法名称
  • destroy-method:指定类中销毁方法名称

Bean实例化的三种方式(重点)

  • 无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化

Bean依赖注入分析

2021-04-02_152549.jpg

UserServiceUserDao都在Spring容器中
程序最终要使用UserService,但save()方法再UserDao
因此在Spring容器中,将UserDao设置到UserService内部
2021-04-02_153024.jpg

Bean的依赖注入概念

def:依赖注入是Spring框架核心IOC的具体实现
在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。
例如:业务层仍会调用持久层的方法,这种业务层和持久层的依赖关系,在使用 Spring 之后,就让 Spring 来维护了。坐等框架把持久层对象传入业务层,而不用我们自己去获取。

Bean依赖注入方式

eg:怎么将UserDao注入到UserService内部

  • 构造方法注入
  • set方法注入
    P命名空间注入:比起上述set方法注入,再配置文件是更加简单
<?xml version="1.0" encoding="UTF-8"?>
<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">
    <!--无参构造方法实例化-->
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"
          init-method="init" destroy-method="destory" scope="prototype"></bean>


    <!--工厂静态方法实例化-->
    <bean id="userDao" class="com.itheima.factory.StaticFactory" factory-method="getUserDao"></bean>


    <!--工厂实例方法实例化-->
    <!--spring帮你创建工厂对象-->
    <bean id="factory" class="com.itheima.factory.DynamicFactory"></bean>
    <!--根据对象中的方法去获得指定UserDao-->
    <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>


    <!--set方法注入--><!--set注入和p注入只能用一个-->
    <!--将userService添加到容器中-->
    <!--要把容器中的userDao,通过userService内部的一个setUserDao方法注入-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property>
    </bean>
    <!--第一个name是service内部对应属性名,ref代表引用容器中bean的id-->


    <!--p方法注入-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl" p:userDao-ref="userDao"/>


    <!--构造方法注入-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>
    <!--第一个name是构造内部的参数名,引用容器中bean的id-->
</beans>

Bean的依赖注入的数据类型

可以数据的三种数据类型:

  • 引用数据类型Bean(上文已详细描述)
  • 普通数据类型
  • 集合数据类型
<!--为普通数据类型注入-->
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
        <property name="username" value="Jack"/>
        <property name="age" value="18"/>
    </bean>
<!--注入的是普通数据,所以不用对象ref,而是用value-->
<!--为集合类型和注入-->
    <bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
        <property name="strList">
            <list><!--集合中存储的是值用value,对象用ref-->
                <value>aaa</value><value>bbb</value><value>ccc</value>
            </list>
        </property>
        <property name="userMap">
            <map>
                <entry key="u1" value-ref="user1"></entry>
                <entry key="u2" value-ref="user2"></entry>
                <!--key后跟的是map中的值(命名什么都行),value-ref后跟的是bean的id引用(必须再容器中在注入过)-->
            </map>
        </property>
        <property name="properties">
            <props>
                <prop key="p1">ppp1</prop>
                <prop key="p2">ppp2</prop>
            </props>
        </property>
    </bean>
    <bean id="user1" class="com.itheima.domain.User">
        <property name="name" value="Tom"/>
        <property name="addr" value="Beijing"/>
    </bean>
    <bean id="user2" class="com.itheima.domain.User">
        <property name="name" value="Jack"/>
        <property name="addr" value="Nanjing"/>
    </bean>

引入其他配置文件(分模块开发)

Spring的配置内容非常多,这就导致Spring配置很繁杂且体积很大
可以将部分配置拆解到其他配置文件中(多个xml)
而在Spring主配置文件通过import标签进行加载
<import resource="applicationContext-user.xml"/>

小结

2021-04-02_173827.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容