21-05-07---spring---学习记录(spirng概述,di注入)

21-05-07

spring概述

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)

ioc的技术实现

DI是ioc的技术实现
DI :依赖注入,只需要在程序中提供要使用的对象名称就可以,至于对象如何在容器中创建,赋值,查找都由容器内部实现。

spring是使用的di实现了ioc的功能,spring底层创建对象,使用的是反射机制

反射机制

Java 反射机制是在运行状态中,对于任意一个类,都能够获得这个类的所有属性和方法,对于任意一个对象都能够调用它的任意一个属性和方法。这种在运行时动态的获取信息以及动态调用对象的方法的功能称为 Java 的反射机制。
可以使用 Constructor 创建新的对象,用 get() 和 set() 方法读取和修改与 Field 对象关联的字段,用 invoke() 方法调用与 Method 对象关联的方法。另外,还可以调用 getFields() getMethods() 和 getConstructors() 等很便利的方法,以返回表示字段,方法,以及构造器的对象的数组。这样匿名对象的信息就能在运行时被完全确定下来,而在编译时不需要知道任何事情。
通过反射机制创建对象,在创建对象之前要获得对象的构造函数对象,通过构造函数对象创建对应类的实例

Spring的配置文件

1.beans:是根标签,spring把java对象称为bean
2.spring-beans.xsd 是约束文件,和mybatis指定的dtd是一样的。

告诉spring创建对象

声明bean,就是告诉spring要创建某个类的对象
id:对象的自定义名称,唯一值 spring通过该这个名称找到对象
class:类的全限定名称(不是接口,因为spring是反射机制常见对象,必须使用类)

一个bean标签声明一个对象

Spring默认创建对象的时间:在创建Spring容器时,会创建配置文件中的所有的对象
Spring创建对象:默认调用的时无参的构造方法

实现spring创建对象的步骤

1.创建maven项目
2.加入maven的依赖

<!--加入spring依赖-->

      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.6.RELEASE</version>
      </dependency>

3.创建类

package com.node.ba01;

public class Student {

    private String name;
    private int age;

    public Student(){

    }
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4.创建spring需要使用的配置文件
声明类的信息,这些类由spring创建和管理

applicationContext.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 http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myStudent" class="com.node.ba01.Student">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
    </bean>

</beans>

5.测试

package com.node;

import com.node.ba01.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    @Test
    public void test02(){
    	//使用spring容器创建对象
        //指定spring配置文件的名称
        String config="ba01/applicationContext.xml";
		//创建表示spring容器的对象,ApplicationContext
		//ApplicationContext就是表示spring容器,通过容器获取对象了
		//ClassPathXmlApplicationContext:表示从类路径中加载spring的配置文件
        ApplicationContext ac=new ClassPathXmlApplicationContext(config);
		//从容器中获取某个对象
		//getBean("配置文件中的bean的id值")
        Student student= (Student) ac.getBean("myStudent");
        System.out.println("Student对象"+student);

    }
}

DI的语法分类

1.set注入(设值注入):spring调用类的set方法,在set方法可以事项属性的赋值 (大多数用)
2.构造注入,spring调用类的有参构造方法,创建对象,在构造方法中完成赋值。

set注入

简单类型:spring中规定java的基本数据类型和String都时简单类型
1.简单类型的set注入

<bean id="myStudent" class="com.node.ba01.Student">
        <property name="属性名字" value="此属性的值"/>
        <property name="age" value="20"/>
        一个property只能给一个属性赋值
    </bean>

2.引用类型的set注入:spring调用类的set方法

<bean id="myStudent" class="com.node.ba02.Student">
        
        <!--引用类型-->
        <property name="属性名字" ref="bean的id(对象的名称)"/>
        <property name="school" ref="mySchool"/>

    </bean>

例:

 <bean id="myStudent" class="com.node.ba02.Student">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
        <!--引用类型-->
        <property name="school" ref="mySchool"/>

    </bean>

    <!--声明School对象-->
    <bean id="mySchool" class="com.node.ba02.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京海淀区"/>
    </bean>

构造注入

spring调用类的有参构造方法,在创建对象的同时,在构造方法中给属性赋值。
构造注入使用 标签
标签:
一个表示构造方法的一个参数
标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,参数从左往右位置时0,1,2的顺序
value:构造方法的形参类型时简单类型的,使用value
ref:构造方法的形参类型时引用类型的,使用ref

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--使用name属性构造注入-->
    <bean id="myStudent" class="com.node.ba03.Student">
        <constructor-arg name="myname" value="张三"/>
        <constructor-arg name="myage" value="20"/>
        <constructor-arg name="myschool" ref="myXuexiao"/>
    </bean>

    <!--使用index方式构造注入-->
    <!--index 可省略,但顺序要按有参构造中的顺序-->
    <bean id="myStudent2" class="com.node.ba03.Student">
        <constructor-arg index="0" value="赵四"/>
        <constructor-arg index="1" value="29"/>
        <constructor-arg index="2" ref="myXuexiao"/>
    </bean>

    <!--声明School对象-->
    <bean id="myXuexiao" class="com.node.ba03.School">
        <property name="name" value="北京大学"/>
        <property name="address" value="北京海淀区"/>
    </bean>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值