首页技术栈归档照片墙音乐日记随想收藏夹友链留言关于

4.Spring 依赖注入

写作时间:2026-07-08

4.Spring 依赖注入

构造器注入

       <!--第一种有参构造,通过下标进行赋值-->
        <bean id="user" class="com.yuan.entity.User">
            <constructor-arg index="0" value="小黑"/>
        </bean>

       <!--第二种 不推荐使用 通过类型创建-->
    <bean id="user" class="com.yuan.entity.User">
      <constructor-arg type="java.lang.String" value="兄白"/>
    </bean>

        <!--第三种通过参数名来设置-->
    <bean id="user" class="com.yuan.entity.User">
        <constructor-arg name="name" value="xiaobai"/>
    </bean>

set方式注入【重点】

​ 依赖注入: Set注入!

​ 依赖: bean对象的创建依赖于容器!

​ 注入: bean对象中的所有属性,由容器来注入!

Student

    private String name;
    private  Address address;
    private  String[] books;
    private List<String> hobbys;
    private Map<String,String> card;
    private Set<String> gnames;
    private  String wife;
    private Properties info;

beans.xml

      <bean id="address" class="com.yuan.entity.Address">
            <property name="address" value="aaa"/>
        </bean>
       <bean id="student" class="com.yuan.entity.Student">
           <!--name实体类的名称-->
           <!--第一种 普通注入-->
           <property name="name" value="小黑"/>
           <!--第二中引入注入-->
           <property name="address" ref="address"/>
           <!--数组注入-->
           <property name="books">
               <array>
                   <value>红楼梦</value>
                   <value>西游记</value>
                   <value>水浒传</value>
                   <value>三国演义</value>
               </array>
           </property>
           <!--list-->
           <property name="hobbys">
               <list>
                   <value>小黑</value>
                   <value>小白</value>
                   <value>小红</value>
               </list>
           </property>
           <!--map-->
           <property name="card">
               <map>
                   <entry key="身份证" value="12345678901234568"/>
                   <entry key="手机号码" value="13787873434"/>
               </map>
           </property>
           <!--set-->
           <property name="gnames">
                <set>
                    <value>abc</value>
                    <value>ddb</value>
                    <value>bbb</value>
                    <value>aaa</value>
                </set>
           </property>
          <!--null-->
           <property name="wife">
               <null/>
           </property>
           <!--Properties-->
           <property name="info">
               <props>
                   <prop key="driver">com.mysql.cj.jdbc.Driver</prop>
                   <prop key="url">jdbc:mysql://localhost:3306/studentdb?useUnicode=true&amp;allowPublicKeyRetrieval=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=Hongkong</prop>
                   <prop key="username">root</prop>
                   <prop key="password">root</prop>
               </props>
           </property>
       </bean>

其他方式注入

可以使用P命名空间 或者C命名空间

<?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:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

      <!--p命名空问注入,可以直接注入属性的值:property-->
     <bean id="user" class="com.yuan.entity.User" p:name="哈哈哈" p:age="18"/>

    <!--c命名空问注入,通过构造器注入注入属性的值:: construct-args-->
    <bean id="user2" class="com.yuan.entity.User" c:name="啦啦啦" c:age="12"/>
</beans>

测试

 ApplicationContext context = new ClassPathXmlApplicationContext("Userbeans.xml");
        User user = context.getBean("user2", User.class);
        System.out.println(user);

注意点,需要导入xml约束

 p命名空间
 xmlns:p="http://www.springframework.org/schema/p"
 c命名空间
 xmlns:c="http://www.springframework.org/schema/c"

bean作用域

单例模式:(Spring默认机制)

 <bean id="user2" class="com.yuan.entity.User" c:name="啦啦啦" c:age="12" scope="singleton"/>

原型模式:(每次容器中get 的时候都会产生一个新的对象)

<bean id="accountService" class="com.something.DefaultAccountService" scope="prototype"/>

其余的resquest,application,session,这些只能在web开发中使用!

作用域 描述 singleton 在spring IoC容器仅存在一个Bean实例,Bean以单例方式存在,bean作用域范围的默认值。 prototype 每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行newXxxBean()。 request 每次HTTP请求都会创建一个新的Bean,该作用域仅适用于web的Spring WebApplicationContext环境。 session 同一个HTTP Session共享一个Bean,不同Session使用不同的Bean。该作用域仅适用于web的Spring WebApplicationContext环境。 application 限定一个Bean的作用域为ServletContext的生命周期。该作用域仅适用于web的Spring WebApplicationContext环境。

avatar

yuanyourdomain

写代码,做研究,记录生活。

RECOMMENDED

MyBatis 动态 SQL

2026-07-08

Nginx 基础入门

2026-07-08

Maven 多模块与私服

2026-07-08