Administrator
发布于 2025-12-18 / 5 阅读
0

Spring注入

Spring注入

什么是注入?

1、通过Spring工厂及配置文件,为所创建对象的成员变量赋值。

为什么需要注入?

通过编码的方式,为成员变量进行赋值,存在耦合。

如何进行注入?

  1. 类为成员变量提供set,get方法

  2. 配置spring的配置文件

    <bean id="person" class="com.example.ex1.Person">
      <property name="id">
        <value>10</value>
      </property>
      <property name="name">
        <value>aaa</value>
      </property>
    </bean>
    

有什么好处?

解耦合。

set注入

注入成员变量分类

694373d70aa46.png

1、String

<value></value>

2、数组

<list>
  <value></value>
</list>

3、集合(里面的标签,具体情况具体分析,可以为任意标签)

<set>
  <value></value>
  <value></value>
</set>

4、List集合(里面的标签,具体情况具体分析,可以为任意标签)

<list></list>

5、map集合(键值的标签,具体情况具体分析,可以为任意标签)

<map>
  <entry>
    <key><value></value></key>
    <value></value>
  </entry>
</map>

6、properties类型

private Properties p;

<property name="p">
  <props>
    <prop key="key1">value1</prop>
  </props>
</property>

用户自定义类型

<property name="userDao">
  <bean class="com.example.ex1.UserDaoImpl" />
</property>

这种配置方式会导致配置文件代码冗余,被注入 的对象多次创建,浪费虚拟机内存资源。

第二种配置方式:

把冗余代码写在外面,然后引用。

694398df82932.png

value和ref可以简化写到property内部。

例如 <property name="hh" value="dfs" />

简化写法2用命名空间 p

<bean id="person" class="com.example.ex1.Person" p:name="aaa" p:id="100">
</bean>

<bean id="userService" class="com.example.ex1.UserServiceImpl" p:userDao-ref="userDao">
</bean>

构造注入

Spring调用构造方法,通过配置文件,为成员变量赋值。

1、为类提供有参构造方法

2、在配置文件中使用 constructor-arg标签

69439d56937b3.png

构造方法重载

参数个数不同时?

通过控制 constructor-arg标签数量来控制。但是只会按顺序赋值。

可以在标签中添加 type通过类型区别来自动选择构造函数。

<constructor-arg type="int"></constructor-arg>