Spring(学习笔记)基础篇Ioc-xml注入!

想法由来

学习中,总会遇到一些问题,有学习中的,也有学习之外的,最重要的是坚持不懈,以往的笔记,记下来后,因为长时间不翻阅,或者翻阅不便等原因,一段时间后再去看,基本上已经不知道自己当初为什么这么写了。
因此,本人决定,开始写博客记录,也与大家共享,这是第一篇,记录了学习了Spring的心路历程。

重点概括

Spring基础篇中,最基础,也是最核心的部分Ioc,控制反转。
简单做一下概念记录,控制反转,即控制权限的反转,从传统的new一个对象,到将控制权交给Spring去管理,需要时,再从Spring容器中拿,无疑节省了许多步骤。

我们知道,Ioc与DI是密不可分的,这里,我做一个简单的总结,Ioc是控制权反转给Spring容器去进行管理,而DI则是依赖注入,将对象从容器中拿回来。

代码时间

首先,创建一个简单的SE工程,这里,使用当前最新的Spring版本。

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>6.1.4</version>
        </dependency>
    </dependencies>

新建一个User类来进行测试

public class User {


    private String id;
    private String username;
    private String address;

    public User() {
        System.out.println("User Init");
    }
}

使用xml配置,新建一个applicationContext.xml,这里需要注意的是,必须在引入Spring依赖之后,才会有下面的新建xml文件选项。
在这里插入图片描述

在这里插入图片描述

   <!--    bean注入容器中,完成初始化!-->
      <bean class="org.tongzhou.model.User" id="user"/>

测试运行如下。

 public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

    }

这里要注意的是,加载Spring容器的时候,就已经将User这个bean注入进去了,可以通过打印无参构造方法,就能看到,初始化的时候没有进行调用,无参构造方法依旧输出了打印。

我们使用有参构造方法注入看看。


    <bean class="org.tongzhou.model.User" id="user">

        <constructor-arg name="address" value="西安"/>
        <constructor-arg name="id" value="1"/>
        <constructor-arg name="username" value="同舟"/>
    </bean>

调用看一下打印出来的值。

 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        User user = ((User) applicationContext.getBean("user"));

        System.out.println(user);

这里有一点需要注意的是,通过名称获取,需要强转一下,因为Spring容器并不知道,你所要的是什么类型的,当然,我们可以一开始就告诉他。

   public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

        User user = ((User) applicationContext.getBean("user"));

        System.out.println(user);

        User user1 = applicationContext.getBean("user", User.class);
        System.out.println(user1);
    }

上面,使用的是有参构造器注入,有时候我们只有一个无参构造器,那我们可以使用set方法注入,如下:

  <bean class="org.tongzhou.model.User" id="user">

       <property name="address" value="西安"/>
        <property name="id" value="1"/>
        <property name="username" value="同舟"/>
    </bean>

有时候,我们会遇到一些比如特殊的属性,也可以采用注入的方式:


public class Book {

    private String[] publish;

    public Book(String[] publish) {
        this.publish = publish;
    }

    @Override
    public String toString() {
        return "Book{" +
                "publish=" + Arrays.toString(publish) +
                '}';
    }
}



public class User {


    private String id;
    private String username;
    private String address;

    private Book book;
}

xml中如下配置。

      <!--    bean注入容器中,完成初始化!-->
    <bean class="org.tongzhou.model.User" id="user">

       <constructor-arg name="address" value="西安"/>
        <constructor-arg name="id" value="1"/>
        <constructor-arg name="username" value="同舟"/>
        <constructor-arg name="book" ref="book"/>
    </bean>

    <bean class="org.tongzhou.model.Book" id="book">
        <constructor-arg name="publish">
            <array>
                <value>清华出版社</value>
                <value>机械工业出版社</value>
            </array>
        </constructor-arg>

    </bean>

其他,特殊属性,如List,Map之类的也是相同的做法!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值