spring ioc注入方式有几种?该怎么实现?

TheDisguiser 2020-05-20 17:07:22 java常见问答 6330

作为spring的核心之一,IOC一直是受到广大程序员欢迎的,想要使用IOC就必须要注入,你知道IOC有几种注入方式吗?又该怎么实现呢?下面一起来看看吧。

在spring IOC中一共有三种依赖注入方式

一、set注入

实现:

Student类

package com.cnblogs.bean;
public class Student
{
    // 学号    
    private String sNo;
    private String name;
    private int age;
    // 性别    
    private String sex;
    //年级
    private String grade;
    public Student()
    {
        super();
    }
    public Student(String sNo, String name, int age, String sex, String grade)
    {
        super();
        this.sNo = sNo;
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.grade = grade;
    }
    // set和get方法    // toString方法()
}

A.java类

package com.cnblogs.bean;
public class A {
    private String desc;
    private Student stu;
    public A() {
        super();
        // TODO Auto-generated constructor stub
    }
    public A(String desc, Student stu) {
        super();
        this.desc = desc;
        this.stu = stu;
    }
    // set和get方法    // toString方法()
    
}

set.xml中

<!-- 基于set方法的注入 -->
    <bean name="stu" class="com.cnblogs.bean.Student">
        <property name="sNo" value="1001"></property>
        <property name="name" value="jack"></property>
        <property name="age" value="12"></property>
        <property name="sex" value="male"></property>
        <property name="grade" value="三年级"></property>
    </bean>
    <!-- 注入引用类型 -->
    <bean name="A" class="com.cnblogs.bean.A">
        <property name="desc" value="A组合了Student类对象"></property>
        <!-- ref属性表示调用这个setStudent方法的时候要用的参数是名字为stu的对象 -->
        <property name="stu" ref="stu"></property>
    </bean>

1.在标签中,name和id会起到标识这个对象的作用,id会帮我们检查给对象起的名字是否规范,name不会检查这些东西。class属性是一个类的全限定名,标识配置那个类。

2.springIoC默认是已单例模式管理对象,即通过相同的名字多次拿出来的对象一样,可以再标签中加属性scope="prototype"代表非单例,scope="Singleton"代表单例模式。

注:set方式底层会用到一个bean类的set方法,如果bean类的成员变量没有set方法却采用了set方式注入会报错。

二、构造器注入

构造器有两种注入方式:

1. 根据参数类型注入

<!-- 根据参数类型 -->
    <bean name="stu1" class="com.cnblogs.bean.Student">
        <constructor-arg type="String" value="1001"></constructor-arg>
        <constructor-arg type="String" value="jack"></constructor-arg>
        <constructor-arg type="int" value="12"></constructor-arg>
        <constructor-arg type="String" value="male"></constructor-arg>
        <constructor-arg type="String" value="三年级"></constructor-arg>
    </bean>

2. 一个根据下标注入

<!-- 根据下标 -->
    <bean name="stu2" class="com.cnblogs.bean.Student">
        <constructor-arg index="0" value="1002"></constructor-arg>
        <constructor-arg index="1" value="tina"></constructor-arg>
        <constructor-arg index="2" value="12"></constructor-arg>
        <constructor-arg index="3" value="female"></constructor-arg>
        <constructor-arg index="4" value="三年级"></constructor-arg>
    </bean>

三、接口注入

接口注入模式的历史已经有一段时间了,因此在许多容器中都有使用到,但因为其时代性原因,灵活性与易用性逊色其他两种注入模式许多,因此,现在的IOC专题内已经很少使用了。

以上就是IOC注入方式的所有内容了,想了解更多与之相关的java常见问答知识,请关注我们的网站吧,我们这里,什么都有~。

推荐阅读:

spring ioc应用场景都有哪些?要如何配置?

spring ioc原理和aop原理分别是什么?spring核心原理详解

spring核心是什么?Spring的体系结构是怎样的?