Spring学习笔记(一)bean的配置

本文是Spring学习笔记的第一部分,主要讲解了bean的配置,包括IOC和DI的概念,基于xml的bean配置,如属性注入、构造器注入、自动装配,以及静态工厂和实例工厂方法创建bean,FactoryBean配置,注解配置,bean的作用域,bean之间的关系,外部属性文件和Spring表达式语言(SpEL)的使用。同时,还介绍了bean的生命周期和bean后置处理器。
摘要由CSDN通过智能技术生成

Spring学习笔记(一)bean的配置

1.IOC与DI

  • IOC(Inversion of Control):其思想是 反 转 资 源 获 取 的 方 向 \color{blue}{反转资源获取的方向} 。传统的资源查找方式要求组件向容器发起请求查找资源。作为回应,容器适时的返回资源。而应用了IOC之后,则是容器主动地将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源。这种行为也被称为查找的被动形式。
    • DI(Dependency injection)-IOC的另一种表述方式:即 组 件 以 一 些 预 先 定 义 好 的 方 式 ( 例 如 : s e t t e r 方 法 ) 接 受 来 自 如 容 器 的 资 源 注 入 \color{blue}{组件以一些预先定义好的方式(例如:setter方法)接受来自如容器的资源注入} setter

2.配置bean

2.1基于xml文件配置bean

  • 基于xml配置bean
<!--    配置bean:
    class:bean的全类名,通过反射的方式在IOC容器中创建bean。所以要求bean中必须有无参构造的构造器。
    id:标识容器中的bean。id唯一。
-->
    <bean id="user" class="com.nl.spring.bean.User">
        <property name="name" value="abc"></property>
    </bean>
  • Spring容器

    Spring提供了两种类型的IOC容器实现

    • BeanFactory:IOC容器的基本实现

    • ApplicationContext:是BeanFactory的子接口

    • 几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory

  • ApplicationContext

    ApplicationContext的主要实现类:

    • ClassPathXmlApplicationContext:从类路径下加载配置文件
    • FileSystemXmlApplicationContext:从文件系统中加载配置文件

    ConfigurableApplicationContext扩展与ApplicationContext,新增两个主要方法:refresh()和close(),让ApplicationContext具有启动、刷新和关闭上下文的能力。

    ApplicationContext在初始化上下文时就实例化所有单例的bean。

  • 获取bean

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //1.利用id查找到容器中的bean
        User user = context.getBean("user", User.class);
        //2.通过类型返回容器中的bean。若有多个相同类型时会报错。
        context.getBean(User.class);

2.2依赖注入的方式:属性注入、构造器注入

User类:

package com.nl.spring.bean;

public class User {
   
    private String name;

    public void setName(String name) {
   
        this.name = name;
    }

    @Override
    public String toString() {
   
        return "User{" +
                "name='" + name + '\'' +
                '}';
    }
}
  • 属性输入

    • 属性注入即通过setter方法注入Bean的属性值或依赖的对象。
    • 属性注入使用<property>元素,使用name属性指定bean的属性名称,value属性或<value>子节点指定属性值。
        <bean id="user" class="com.nl.spring.bean.User">
            <property name="name" value="abc"></property>
        </bean>
    
  • 构造方法注入

    • 通过构造方法注入bean的属性值或依赖对象,它保证了Bean实例在实例化后就可以使用。
    • 构造器注入在<constructor-arg>元素里声明属性,<constructor-arg>中没有name属性。

Student类:

package com.nl.spring.bean;

public class Student {
   
    private String id;
    private String name;
    private Double avgScore;

    public Student() {
   
    }

    public Student(String id, String name, Double avgScore) {
   
        this.id = id;
        this.name = name;
        this.avgScore = avgScore;
    }

    public void setId(String id) {
   
        this.id = id;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public void setAvgScore(Double avgScore) {
   
        this.avgScore = avgScore;
    }

    @Override
    public String toString() {
   
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", avgScore=" + avgScore +
                '}';
    }
}
  1. 普通属性赋值

配置:

<bean id="student" class="com.nl.spring.bean.Student">
    	<!--通过构造器参数索引-->
        <constructor-arg value="0001" index="0"></constructor-arg>
        <constructor-arg value="Andy" index="1"></constructor-arg>
        <constructor-arg value="89.5" index="2"></constructor-arg>
</bean>
<bean id="student1" class="com.nl.spring.bean.Student">
    	<!--通过构造器参数类型-->
       <constructor-arg type="java.lang.String" value=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值