Spring框架学习Day02(依赖注入)

Posted 龚喜发财+1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架学习Day02(依赖注入)相关的知识,希望对你有一定的参考价值。

一.IOC创建对象的方式

1.使用无参构造创建对象(默认)
2.假设使用有参构造函数创建对象
(1)参数下标赋值

<bean id="user" class="com.xu.pojo.User">
        <constructor-arg index="0" value="xuan"></constructor-arg>
    </bean>

(2)参数类型赋值(如果有多个变量类型相同,则会按照顺序进行赋值?)

<bean id="user" class="com.xu.pojo.User">
        <constructor-arg type="java.lang.String" value="xuan"></constructor-arg>
    </bean>

(3)直接通过参数名

<bean id="user" class="com.xu.pojo.User">
        <constructor-arg name="name" value="xuun"></constructor-arg>
    </bean>

总结:在配置文件加载的时候,容器中管理的对象就已经初始化了,即在 ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);时对象已经被创建

二.Spring配置

1.别名alias<alias></alias>
2.Bean的配置
id:bean的唯一标识符,相当于对象名
class:对象所对应的全限定名:包名+类型
name:也是别名,name可以同时取多个别名name=“user1 user2,user3;user4”
3.import(一般用于团队开发使用,可以将多个配置文件,导入合并成为一个)

三.依赖注入

1.构造器注入
参考本章第一节 IOC创建对象的方式
2.set方式注入(重要)
(1)依赖:bean对象的创建依赖于容器
(2)注入:bean对象中的所有属性,由容器来注入
搭建环境
(1)复杂环境:

//Student类
private String name;
    private Address address;
    private String[] books;
    private List<String> hobbies;
    private Map<String,String> card;
    private Set<String> games;
    private String wife;
    private Properties info;
//address类
private String address;

(2)applicationContext.xml

<bean id="address" class="com.xu.pojo.Address"></bean>
    <bean id="student" class="com.xu.pojo.Student">
    <!--第一种,普通值注入,value-->
        <property name="name" value="hh"></property>
    <!--第二种,bean注入,ref-->
        <property name="address" ref="address"></property>
    <!--数组注入    -->
        <property name="books" >
            <array>
                <value>红楼梦</value>
                <value>三国演义</value>
            </array>
        </property>
        <!--list注入    -->
        <property name="hobbies">
            <list>
                <value>reading</value>
                <value>game</value>
            </list>
        </property>
        <!--map注入    -->
        <property name="card">
            <map>
                <entry key="idcard" value="121212"/>
                 <entry key="cre" value="24234"/>
            </map>
        </property>
        <!--set注入    -->
        <property name="games">
            <set>
                <value>wangzherongy</value>
                <value>hepingjingy</value>
            </set>
        </property>
        <!--null注入    -->
        <property name="wife">
            <null/>
        </property>
        <!--properties注入    -->
        <property name="info">
            <props>
                <prop key="学号">67167</prop>
                <prop key="sex"></prop>
            </props>
        </property>
    </bean>

(3)测试类Mytest

public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        Student student =(Student) context.getBean("student");
        System.out.println(student.toString());
    }

3.拓展方式注入
p命名空间:xmlns:p="http://www.springframework.org/schema/p"可以直接注入属性的值:property
c命名空间:xmlns:c="http://www.springframework.org/schema/c",通过构造器注入:construct
4.Bean的作用域
在这里插入图片描述
(1)单例模式(Spring默认的机制)

<bean id='' '' scope="singleton">

(2)原型模式
每次从容器中get时,都会产生一个新对象

<bean id='' '' scope="prototype">

(3)其余的在web开发中应用
7.Bean的自动装配

  1. 自动装配是Spring满足Bean依赖的一种方式
  2. Spring会在上下文中自动寻找,并自动给bean装配
  3. 在Spring有三种自动装配方式
    (1)xml显式装配
    (2)java中显式装配
    (3)隐式自动装配
    7.1环境搭建

7.2Byname自动装配
(1)会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
(2)需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法的值一致

<bean id="people" class="com.xu.pojo.people" autowire="byName">

7.3ByType自动装配
(1)会自动在容器上下文中查找,和自己对象属性类型相同的bean
(2)需要保证所有bean的class唯一

<bean id="people" class="com.xu.pojo.people" autowire="byType">

7.4使用注解实现自动装配
(1)导入约束
(2)配置注解的支持

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启注解的支持-->
    <context:annotation-config/>

</beans>

@Autowired
(1)可以在属性上使用,也可以在set方法上使用
(2)先按bytype查找,再按byname查找,再使用@qualifer(value=""),必须要求对象存在
@Resource
(1)先按byname查找,再按bytype查找,如果两个都找不到,就报错
(2)可以在属性上使用

以上是关于Spring框架学习Day02(依赖注入)的主要内容,如果未能解决你的问题,请参考以下文章

Spring_day01

Spring 框架学习---- 依赖注入

框架学习 Spring之依赖注入DI

Spring框架学习教程,详解Spring注入bean的几种方式

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

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段