Spring学习三、Spring配置与DI依赖注入

五、Spring配置

5.1别名

<!-- 别名-->
<alias name="user" alias="user2"/>

5.2 Bean的配置

<!--
        id  : bean的唯一标识符,相当于对象名
        class : 全限定名 包名 + 类名
        name : 也是别名,name可以同时起多个别名
    -->
<bean id="userT" class="cn.imut.pojo.User" name="user3 u2,u3;u4">
    <property name="name" value="1"/>
</bean>

5.3 import

一般用于团队,它可以将多个配置文件,导入合并为一个

假设项目有多人开发,这三个人复制不同的类开发,不同的类需要注册在不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的 applicationContext.xml

使用时,直接用总的配置即可

六、DI依赖注入

6.1 构造器注入

前面已经说明

6.2 Set注入[重点]

  • 依赖注入:Set注入

    • 依赖:bean对象的创建依赖于容器
    • 注入:bean对象中的所有属性,由容器来注入

【环境搭建】

  1. 复杂类型

    @Data
    public class Address {
        private String address;
    }
  2. 真实测试对象
    @Data
    @SuppressWarnings("all")
    public class Student {
        private String name;
        private Address address;
        private String[] books;
        private List<String> hobbys;
        private Map<String,String> card;
        private Set<String> games;
        private Properties info;
        private String wife;        //空指针
    }
  3. beans.xml
    <?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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="address" class="cn.imut.pojo.Address">
            <property name="address" value="呼和浩特"/>
        </bean>
    
        <bean id="student" class="cn.imut.pojo.Student">
    
            <!-- 第一种,普通值注入,value-->
            <property name="name" value="张磊"/>
    
            <!-- 第二种,bean注入,ref-->
            <property name="address" ref="address"/>
    
            <!-- 第三种,数组注入-->
            <property name="books">
                <array>
                    <value>红楼梦</value>
                    <value>水浒传</value>
                    <value>三国演义</value>
                    <value>西游记</value>
                </array>
            </property>
    
            <!-- 第四种,List注入-->
            <property name="hobbys">
                <list>
                    <value>吃</value>
                    <value>喝</value>
                    <value>玩</value>
                    <value>乐</value>
                </list>
            </property>
    
            <!-- 第五种,Map注入-->
            <property name="card">
                <map>
                    <entry key="身份证" value="123"/>
                    <entry key="QQ号" value="1234"/>
                </map>
            </property>
    
            <!-- 第六种,Set注入-->
            <property name="games">
                <set>
                    <value>LOL</value>
                    <value>CF</value>
                </set>
            </property>
    
            <!-- 第七种,null-->
            <property name="wife">
                <null/>
            </property>
    
            <!-- 第八种,properties-->
            <property name="info">
                <props>
                    <prop key="学号">123456</prop>
                    <prop key="姓名">张磊</prop>
                    <prop key="性别">男</prop>
                </props>
            </property>
        </bean>
    </beans>
  4. 测试类
    public class MyTest {
        public static void main(String[] args) {
    
            ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
            Student student = (Student) context.getBean("student");
    
            System.out.println(student.toString());
        }
    }

6.3 拓展方式

可以使用p或者c命名空间

<!-- p命名空间注入,可以直接注入属性-->
<bean id="user" class="cn.imut.pojo.User" p:name="张磊" p:age="18">
</bean>

<!-- c命名注入,通过构造器注入-->
<bean id="user2" class="cn.imut.pojo.User" c:age="18" c:name="张磊">

</bean>

注意:p,c命名空间不能和直接使用,需要导入约束

xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"

6.4 bean的作用域

  1. 单例模式(默认)

    当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

    Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象。

    <bean id="user2" class="cn.imut.pojo.User" c:age="18" c:name="张磊" scope="singleton">
  2. 原型模式

    当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。

    Prototype是原型类型,它在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象。

    <bean id="user2" class="cn.imut.pojo.User" c:age="18" c:name="张磊" scope="prototype">

    每次从容器get时,都会产生一个新的对象

  3. 其余的request、session、application只能在Web开发中使用到!

原文地址:https://www.cnblogs.com/yfyyy/p/12433396.html

时间: 2024-12-08 13:16:25

Spring学习三、Spring配置与DI依赖注入的相关文章

Spring学习总结(1.2)-依赖注入及配置了解

前面的博客大概的讲了一下IOC容器的理解,那么IOC的实现实际上依托于依赖注入的.简单的说就是IOC是一种思想,而依赖注入为这种思想提供了实现.个人是这么理解的.本篇博客介绍两种常用的注入方式,以及他们的配置(基于XML). IOC容器说明 从最近的学习来看,特别是基于XML的配置形式下.IOC容器就是一个生产线,它依据配置中类之间的持有关系,一个部件一个部件的组装成一个完整的产品去执行一个完整的任务.从使用者的方向上看,他只能看到一个入口,而之后的处理他是不知道的.当然,这在没有容器的概念的时

spring学习总结一----控制反转与依赖注入

spring作为java EE中使用最为广泛的框架,它的设计体现了很多设计模式中经典的原则和思想,所以,该框架的各种实现方法非常值得我们去研究,下面先对spring中最为重要的思想之一----控制反转(依赖注入)进行简单的总结. 一.控制反转与依赖注入的概念 在学习spring框架的时候,我们习惯性地将控制反转和依赖注入放在一起,其实,两者体现的思想原则都是差不多的,只不过控制反转是一种更广泛的程序操作理念,而依赖注入是一种更为具体的实现方法,总的来说,控制反转可以依靠依赖注入来实现. 1.控制

spring学习(三) ———— spring事务操作

前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTemplate? spring提供用于操作数据库模版,类似Dbutils,通俗点讲,我们操作数据库,spring也会帮我们提供一个操作数据库的工具供我们使用,而不用我们自己手动编写连接数据库,获取结果集等等操作,这个工具就是JdbcTemplate.跟Dbutils一样,想要使用JdbcTemplate

Spring详解(三)------DI依赖注入

上一篇博客我们主要讲解了IOC控制反转,也就是说IOC 让程序员不在关注怎么去创建对象,而是关注与对象创建之后的操作,把对象的创建.初始化.销毁等工作交给spring容器来做.那么创建对象的时候,有可能依赖于其他的对象,即类的属性如何赋值?这也是我们这篇博客讲解 Spring 另一个核心要点:DI依赖注入. PS:本篇博客源码下载链接:http://pan.baidu.com/s/1c2xVUDi密码:v1h3 1.什么是DI依赖注入? spring动态的向某个对象提供它所需要的其他对象.这一点

初识Spring框架实现IOC和DI(依赖注入)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的, IoC是什么 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. 在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制.如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转

Spring:(二)DI依赖注入方式

DI 依赖注入 DI(Dependency Injection)依赖注入,说简单一点就将类里面的属性在创建类的过程中给属性赋值,即将对象依赖属性(简单值,集合,对象)通过配置设值给该对象. 属性注入的方式 构造方法的方式 set方法的方式 工厂方法注入 主要学习前两种方式 构造方法的方式 当是构造方法时注入Bean的属性值(简单值,集合,对象) 利用<constructor-arg>标签进行属性的注入 name:被设置属性的名 value:被设置属性的值 编写用构造方法的pojo 1 pack

Spring学习笔记6---bean配置和bean注入

1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用. 1 bean配置 bean配置有三种方法: 基于xml配置Bean 使用注解定义Bean 基于java类提供Bean定义信息 1.1 基于xml配置Bean 对于基于XML的配置,S

【Spring】DI 依赖注入传递参数的方式

DI依赖注入传入参数的方式,这里介绍了基本数据类型,集合,符合数据类型的传递(String类型比较特殊,其传递值和基本数据类型的方法一致) 注入基本数据类型和String类型 通过setter方法注入基本数据类型与String 案例: <bean id="book" class="cn.xdl.bean.Book"> <!-- 对于基本数据类型 与 String的注入操作 通过set方法 ,完成注入 name: 属性的名称 value: 属性要赋的

框架 day36 Spring3 入门,DI依赖注入,装配bean基于xml/注解, 整合Junit4,配置约束自动提示

1 什么是spring 1.1官网 spring.io 1.2介绍 Spring的核心是控制反转(IoC)和面向切面(AOP). IoC(Inverse of Control 反转控制) AOP(Aspect Oriented Programming 面向切面编程为内核) 简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架. *轻量级:依赖其他内容较小,使用资源消耗也少.对比:EJB 重量级 *分层:经典三层体系架构,spring 提供解决方案