Spring依赖注入

2023-11-18

一、什么是依赖注入

DI (Dependency Injection):依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度。

在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使对象之间的耦合越小越好。

1 类的关系

继承、实现、依赖、关联、聚合、组合。

2 关系强度

继承 = 实现 > 组合 > 聚合 > 关联 > 依赖

二、为什么使用依赖注入

1 开闭原则

1.1 定义

OCP (Open Close Principle): 软件本身应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的

1.2 开闭原则优点

易扩展。开闭原则的定义就要求对扩展开放。

易维护。软件开发中,对现有代码的修改是一件很有风险的事情,符合开闭原则的设计在扩展时无需修改现有代码,规避了这个风险,大大提交了可维护性。

2 高内聚,低耦合

高内聚是指相关度比较高的部分尽可能的集中,不要分散。

低耦合就是说两个相关的模块尽可以能把依赖的部分降低到最小,不要产生强依赖。

三、依赖注入的方式

在使用依赖注入时,如果注入的是 Bean 对象,那么要求注入的 Bean 对象与被注入的Bean 对象都需要 Spring IOC 容器来实例化。

1 通过 Set 方法注入

需要为注入的成员变量提供 Set 方法。

1.1 POJO中添加属性、set方法和toString方法

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendOYY</span> <span style="color:#770088">implements</span> <span style="color:#000000">Girlfriend</span> {
    <span style="color:#770088">private</span> <span style="color:#008855">double</span> <span style="color:#000000">hight</span>;
    <span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">education</span>;
​
    <span style="color:#555555">@Override</span>
    <span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#000000">toString</span>() {
        <span style="color:#770088">return</span> <span style="color:#aa1111">"GirlfriendOYY{"</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">"hight="</span> <span style="color:#981a1a">+</span> <span style="color:#000000">hight</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">", education='"</span> <span style="color:#981a1a">+</span> <span style="color:#000000">education</span> <span style="color:#981a1a">+</span> <span style="color:#aa1111">'\''</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">'}'</span>;
    }
​
    <span style="color:#770088">public</span> <span style="color:#008855">double</span> <span style="color:#000000">getHight</span>() {
        <span style="color:#770088">return</span> <span style="color:#000000">hight</span>;
    }
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">setHight</span>(<span style="color:#008855">double</span> <span style="color:#000000">hight</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">hight</span> <span style="color:#981a1a">=</span> <span style="color:#000000">hight</span>;
    }
​
    <span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#000000">getEducation</span>() {
        <span style="color:#770088">return</span> <span style="color:#000000">education</span>;
    }
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">setEducation</span>(<span style="color:#008855">String</span> <span style="color:#000000">education</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">education</span> <span style="color:#981a1a">=</span> <span style="color:#000000">education</span>;
    }
}</span></span>

1.2 Spring的xml配置文件

<span style="background-color:#f8f8f8"><span style="color:#333333">    <span style="color:#aa5500"><!--1.1 通过构造方法创建对象--></span>
    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf1"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span>
          <span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"prototype"</span> <span style="color:#0000cc">lazy-init</span>=<span style="color:#aa1111">"false"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"education"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"本科"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hight"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>1.65<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

1.3 测试

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriend</span> {
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {
        <span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);
        <span style="color:#000000">Girlfriend</span> <span style="color:#000000">gf</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf1"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">gf</span>);
    }
}</span></span>

运行结果

2 通过构造方法注入

Bean 对象中需要提供有参的构造方法

name:根据参数名称识别参数

index:根据参数的位置来识别参数

type:根据参数的类型识别参数

2.1 POJO中添加有参构造方法

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendOYY</span> <span style="color:#770088">implements</span> <span style="color:#000000">Girlfriend</span> {
    <span style="color:#770088">private</span> <span style="color:#008855">double</span> <span style="color:#000000">hight</span>;
    <span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">education</span>;
​
    <span style="color:#770088">public</span> <span style="color:#000000">GirlfriendOYY</span>(<span style="color:#008855">double</span> <span style="color:#000000">hight</span>, <span style="color:#008855">String</span> <span style="color:#000000">education</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">hight</span> <span style="color:#981a1a">=</span> <span style="color:#000000">hight</span>;
        <span style="color:#770088">this</span>.<span style="color:#000000">education</span> <span style="color:#981a1a">=</span> <span style="color:#000000">education</span>;
    }
}</span></span>

2.2 Spring的xml配置文件

<span style="background-color:#f8f8f8"><span style="color:#333333">    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf4"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"education"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"专科"</span><span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hight"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>1.65<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">constructor-arg</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf5"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">index</span>=<span style="color:#aa1111">"0"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"1.68"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">index</span>=<span style="color:#aa1111">"1"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>高中<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">constructor-arg</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span>
    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf6"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">type</span>=<span style="color:#aa1111">"double"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"1.73"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">type</span>=<span style="color:#aa1111">"java.lang.String"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>硕士<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">constructor-arg</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

2.3 测试

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriend</span> {
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {
        <span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);
        <span style="color:#000000">Girlfriend</span> <span style="color:#000000">gf</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf4"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">gf</span>);
         <span style="color:#000000">gf</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf5"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">gf</span>);
         <span style="color:#000000">gf</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf6"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">gf</span>);
    }
}</span></span>

运行结果:

3 自动注入

自动注入的方式有两种,一种是全局配置自动注入,另一种是局部配置自动注入

无论全局配置或局部单独配置,都有 5 个值可以选择:

no:当 autowire 设置为 no 的时候,Spring 就不会进行自动注入。

byName:在 Spring 容器中查找 id 与属性名相同的 bean,并进行注入。需要提供 set 方法。

byType:在 Spring 容器中查找类型与属性名的类型相同的 bean,并进行注入。需要提供 set 方法。

constructor:仍旧是使用 byName 方式,只不过注入的时候,使用构造方式进行注入。

default:全局配置的 default 相当于 no,局部的 default 表示使用全局配置设置。

3.1 局部自动注入

通过 bean 标签中的 autowire 属性配置自动注入。

有效范围:仅针对当前 bean 标签生效。

3.1.1 POJO

接口:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">interface</span> <span style="color:#0000ff">GirlfriendProxyService</span> {
    <span style="color:#000000">Girlfriend</span> <span style="color:#000000">findGirlFriend</span>();
}</span></span>

实现类:

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendProxyServiceImpl</span> <span style="color:#770088">implements</span> <span style="color:#000000">GirlfriendProxyService</span> {
    <span style="color:#000000">Girlfriend</span> <span style="color:#000000">girlfriend</span>;
    <span style="color:#770088">public</span> <span style="color:#000000">GirlfriendProxyServiceImpl</span>(){}
​
    <span style="color:#770088">public</span> <span style="color:#000000">GirlfriendProxyServiceImpl</span>(<span style="color:#000000">Girlfriend</span> <span style="color:#000000">girlfriend</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">girlfriend</span> <span style="color:#981a1a">=</span> <span style="color:#000000">girlfriend</span>;
    }
​
    <span style="color:#770088">public</span> <span style="color:#000000">Girlfriend</span> <span style="color:#000000">getGirlfriend</span>() {
        <span style="color:#770088">return</span> <span style="color:#000000">girlfriend</span>;
    }
​
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">setGirlfriend</span>(<span style="color:#000000">Girlfriend</span> <span style="color:#000000">girlfriend</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">girlfriend</span> <span style="color:#981a1a">=</span> <span style="color:#000000">girlfriend</span>;
    }
​
    <span style="color:#555555">@Override</span>
    <span style="color:#770088">public</span> <span style="color:#000000">Girlfriend</span> <span style="color:#000000">findGirlFriend</span>() {
        <span style="color:#770088">return</span> <span style="color:#770088">this</span>.<span style="color:#000000">girlfriend</span>;
    }
}</span></span>

3.1.2 Spring的xml配置

<span style="background-color:#f8f8f8"><span style="color:#333333">    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf6"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"girlfriend"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">type</span>=<span style="color:#aa1111">"double"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"1.73"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">constructor-arg</span> <span style="color:#0000cc">type</span>=<span style="color:#aa1111">"java.lang.String"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>硕士<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">constructor-arg</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span>
​
    <span style="color:#aa5500"><!--autowire表示自动装配 :</span>
    <span style="color:#aa5500">byName 根据bean的名字去自动转配(name属性值需要跟构造方法中的name属性值一致),</span>
     <span style="color:#aa5500">byType根据类型自动装配--></span>
    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gfService"</span>
          <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.service.impl.GirlfriendProxyServiceImpl"</span> <span style="color:#0000cc">autowire</span>=<span style="color:#aa1111">"byName"</span><span style="color:#117700">></span>
        <span style="color:#aa5500"><!--<property name="girlfriend" ></span>
            <span style="color:#aa5500"><ref bean="gf6"/></span>
        <span style="color:#aa5500"></property>--></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

3.1.3 测试

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGFServiceByName</span> {
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {
        <span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);
        <span style="color:#000000">GirlfriendProxyServiceImpl</span> <span style="color:#000000">gfService</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">GirlfriendProxyServiceImpl</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gfService"</span>);
        <span style="color:#000000">Girlfriend</span> <span style="color:#000000">girlfriend</span> <span style="color:#981a1a">=</span> <span style="color:#000000">gfService</span>.<span style="color:#000000">getGirlfriend</span>();
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">girlfriend</span>);
    }
}</span></span>

运行结果:

 

如果将上述Spring的xml配置中的autowire属性值改成byType,表示根据类型自动装配,则会报如下错误

3.2 全局自动注入

通过 beans 标签中的default-autowire  属性配置自动注入。

有效范围:配置文件中的所有 bean 标签都生效。

四、依赖注入的数据类型

1 注入 Bean 对象

<span style="background-color:#f8f8f8"><span style="color:#333333">    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gfService"</span>
          <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.service.impl.GirlfriendProxyServiceImpl"</span> <span style="color:#0000cc">autowire</span>=<span style="color:#aa1111">"byType"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"girlfriend"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">ref</span> <span style="color:#0000cc">bean</span>=<span style="color:#aa1111">"gf6"</span><span style="color:#117700">/></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

2 注入基本数据类型和字符串

<span style="background-color:#f8f8f8"><span style="color:#333333">   <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf1"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span>
          <span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"prototype"</span> <span style="color:#0000cc">lazy-init</span>=<span style="color:#aa1111">"false"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"education"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"本科"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hight"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>1.65<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

3 注入 List

3.1 POJO

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendOYY</span> <span style="color:#770088">implements</span> <span style="color:#000000">Girlfriend</span> {
    <span style="color:#770088">private</span> <span style="color:#008855">double</span> <span style="color:#000000">hight</span>;
    <span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">education</span>;
    <span style="color:#770088">private</span> <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">hobby</span>;     <span style="color:#aa5500">// 兴趣爱好</span>
    <span style="color:#770088">public</span> <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">getHobby</span>() {
        <span style="color:#770088">return</span> <span style="color:#000000">hobby</span>;
    }
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">setHobby</span>(<span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">hobby</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">hobby</span> <span style="color:#981a1a">=</span> <span style="color:#000000">hobby</span>;
    }    
    <span style="color:#555555">@Override</span>
    <span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#000000">toString</span>() {
        <span style="color:#770088">return</span> <span style="color:#aa1111">"GirlfriendOYY{"</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">"hight="</span> <span style="color:#981a1a">+</span> <span style="color:#000000">hight</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">", education='"</span> <span style="color:#981a1a">+</span> <span style="color:#000000">education</span> <span style="color:#981a1a">+</span> <span style="color:#aa1111">'\''</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">", hobby="</span> <span style="color:#981a1a">+</span> <span style="color:#000000">hobby</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">'}'</span>;
    }
}</span></span>

3.2 Spring的xml配置

<span style="background-color:#f8f8f8"><span style="color:#333333">   <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf1"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span>
          <span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"prototype"</span> <span style="color:#0000cc">lazy-init</span>=<span style="color:#aa1111">"false"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"education"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"本科"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hight"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>1.65<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hobby"</span><span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">list</span><span style="color:#117700">></span>
                <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>看电影<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
                <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>旅游<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
            <span style="color:#117700"></</span><span style="color:#117700">list</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
    <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

3.3 测试

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">TestGirlfriend</span> {
    <span style="color:#770088">public</span> <span style="color:#770088">static</span> <span style="color:#008855">void</span> <span style="color:#000000">main</span>(<span style="color:#008855">String</span>[] <span style="color:#000000">args</span>) {
        <span style="color:#000000">ApplicationContext</span> <span style="color:#000000">ac</span> <span style="color:#981a1a">=</span> <span style="color:#770088">new</span> <span style="color:#000000">ClassPathXmlApplicationContext</span>(<span style="color:#aa1111">"application_context.xml"</span>);
        <span style="color:#000000">Girlfriend</span> <span style="color:#000000">gf</span> <span style="color:#981a1a">=</span> (<span style="color:#000000">Girlfriend</span>) <span style="color:#000000">ac</span>.<span style="color:#000000">getBean</span>(<span style="color:#aa1111">"gf1"</span>);
        <span style="color:#000000">System</span>.<span style="color:#000000">out</span>.<span style="color:#000000">println</span>(<span style="color:#000000">gf</span>);
    }
}</span></span>

运行结果:

4 注入 Set

同上。

5 注入 Map

5.1 POJO修改

<span style="background-color:#f8f8f8"><span style="color:#333333"><span style="color:#770088">public</span> <span style="color:#770088">class</span> <span style="color:#0000ff">GirlfriendOYY</span> <span style="color:#770088">implements</span> <span style="color:#000000">Girlfriend</span> {
    <span style="color:#770088">private</span> <span style="color:#008855">double</span> <span style="color:#000000">hight</span>;
    <span style="color:#770088">private</span> <span style="color:#008855">String</span> <span style="color:#000000">education</span>;
    <span style="color:#770088">private</span> <span style="color:#000000">List</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">hobby</span>;
    <span style="color:#770088">private</span> <span style="color:#000000">Map</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span>, <span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">parents</span>;    <span style="color:#aa5500">// 父母情况</span>
    <span style="color:#770088">public</span> <span style="color:#000000">Map</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span>, <span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">getParents</span>() {
        <span style="color:#770088">return</span> <span style="color:#000000">parents</span>;
    }
    <span style="color:#770088">public</span> <span style="color:#008855">void</span> <span style="color:#000000">setParents</span>(<span style="color:#000000">Map</span><span style="color:#981a1a"><</span><span style="color:#008855">String</span>, <span style="color:#008855">String</span><span style="color:#981a1a">></span> <span style="color:#000000">parents</span>) {
        <span style="color:#770088">this</span>.<span style="color:#000000">parents</span> <span style="color:#981a1a">=</span> <span style="color:#000000">parents</span>;
    }
​
    <span style="color:#555555">@Override</span>
    <span style="color:#770088">public</span> <span style="color:#008855">String</span> <span style="color:#000000">toString</span>() {
        <span style="color:#770088">return</span> <span style="color:#aa1111">"GirlfriendOYY{"</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">"hight="</span> <span style="color:#981a1a">+</span> <span style="color:#000000">hight</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">", education='"</span> <span style="color:#981a1a">+</span> <span style="color:#000000">education</span> <span style="color:#981a1a">+</span> <span style="color:#aa1111">'\''</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">", hobby="</span> <span style="color:#981a1a">+</span> <span style="color:#000000">hobby</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">", parents="</span> <span style="color:#981a1a">+</span> <span style="color:#000000">parents</span> <span style="color:#981a1a">+</span>
                <span style="color:#aa1111">'}'</span>;
    }
}</span></span>

5.2 Spring的xml配置修改

<span style="background-color:#f8f8f8"><span style="color:#333333">    <span style="color:#117700"><</span><span style="color:#117700">bean</span> <span style="color:#0000cc">id</span>=<span style="color:#aa1111">"gf1"</span> <span style="color:#0000cc">class</span>=<span style="color:#aa1111">"com.dyh.pojo.impl.GirlfriendOYY"</span>
          <span style="color:#0000cc">scope</span>=<span style="color:#aa1111">"prototype"</span> <span style="color:#0000cc">lazy-init</span>=<span style="color:#aa1111">"false"</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"education"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"本科"</span> <span style="color:#117700">/></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hight"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>1.65<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"hobby"</span><span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">list</span><span style="color:#117700">></span>
                <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>看电影<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
                <span style="color:#117700"><</span><span style="color:#117700">value</span><span style="color:#117700">></span>旅游<span style="color:#117700"></</span><span style="color:#117700">value</span><span style="color:#117700">></span>
            <span style="color:#117700"></</span><span style="color:#117700">list</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
        <span style="color:#117700"><</span><span style="color:#117700">property</span> <span style="color:#0000cc">name</span>=<span style="color:#aa1111">"parents"</span> <span style="color:#117700">></span>
            <span style="color:#117700"><</span><span style="color:#117700">map</span><span style="color:#117700">></span>
                <span style="color:#117700"><</span><span style="color:#117700">entry</span> <span style="color:#0000cc">key</span>=<span style="color:#aa1111">"father"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"zs"</span> <span style="color:#117700">/></span>
                <span style="color:#117700"><</span><span style="color:#117700">entry</span> <span style="color:#0000cc">key</span>=<span style="color:#aa1111">"mother"</span> <span style="color:#0000cc">value</span>=<span style="color:#aa1111">"ls"</span> <span style="color:#117700">/></span>
            <span style="color:#117700"></</span><span style="color:#117700">map</span><span style="color:#117700">></span>
        <span style="color:#117700"></</span><span style="color:#117700">property</span><span style="color:#117700">></span>
     <span style="color:#117700"></</span><span style="color:#117700">bean</span><span style="color:#117700">></span></span></span>

测试类不用修改,运行结果:

6 注入Properties

略。

总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring依赖注入 的相关文章

随机推荐

  • 解决Echarts默认值为NaN问题

    只需要将echarts的下面属性进行修改就可以了 我们可以在下面代码逻辑中添加自己的逻辑 tooltip trigger item formatter function params if params value return param
  • CSS样式中background-position:后的两个值代表什么?

    如果提供了两个值 第一个会决定距离左边缘的偏移 即水平位置 第二个值会决定图片从上边缘向下的偏移 即竖直的位置 例如 background position 5px 10px 则代表 背景图片向左偏移5px 向下偏移 10px
  • [创业-37]:公司的组织架构--所有者与决策机构(股东)

    目录 第1章公司的组织架构 1 1 什么是公司的组织架构 1 2 公司组织架构的类型 第2章 典型的上司公司组织架构 2 1 股东大会 2 2 董事会 2 3 监事会 2 4 总经理 补充 创始人 董事长 CEO 总裁 总经理的区别 第1章
  • PAT2-回形取数

    回形取数 qdulq 40 分 回形取数就是沿矩阵的边取数 若当前方向上无数可取或已经取过 则左转90度 一开始位于矩阵左上角 方向向下 输入格式 输入第一行是两个不超过200的正整数m n 表示矩阵的行和列 接下来m行每行n个整数 表示这
  • CSS 层叠上下文(Stacking Context)

    在网页制作的过程中 元素与元素之间的位置关系 在坐标轴上一般可体现为 X 轴 Y 轴和 Z 轴 对于 X 轴和 Y 轴的定位大多数开发都能比较直观的搞清楚 而 Z 轴 则相对较为模糊 或者说不能全面的理解Z轴的显示逻辑 大多数人都知道可以使
  • springboot 配置文件中属性变量引用方式@@解析

    这种属性应用方式是field name field value 两个 符号是springboot为替代 属性占位符产生 原因是 会被maven处理 所以应该是起不到引用变量的作用 方式可以引用springboot非默认配置文件 即其他配置文
  • 【01】OpenCV模块架构介绍+示例程序演示

    本系列文章是基于Windows下 结合Visual Studio2017和OpenCV4 7进行编写 使用C 代码进行演示 目录 1 OpenCV模块架构 2 示例程序效果展示 2 0创建工程 2 1边缘检测示例edge cpp 2 2K聚
  • 求学在卡梅

    卡内基梅隆大学坐落在美国宾夕法尼亚州匹兹堡市 对于卡梅 我同样慕名已久 清华大学的计算机学科在国内名列前茅 而卡内基梅隆大学计算机学院下属计算机 机器人和语言工程等几个系 和麻省理工 斯坦福 伯克利一起在计算机领域排名第一 1999年8月
  • 纯新手入门机器/深度学习自学指南(附一个月速成方案)

    原作 Masum Hasan问耕 编译整理量子位 出品 公众号 QbitAI 怎么入门机器 深度学习 回答这个问题 最先要考虑的问题是 你有多少时间 准备用三个月入门 和想要一个月速成 肯定是截然不同的路径 当然我建议大家稳扎稳打 至少可以
  • 如何解决K8S节点显示NotReady

    文章目录 kubernetes节点断电重启 kubernetes节点断电重启 背景 运行的好好的k8s集群 某天断电 发现一个节点炸了 显示NotReady kubectl get nodes 那么如何查找问题呢 我们用它 journalc
  • 如何在移动端猎豹浏览器中设置代理IP

    手机浏览器作为一款功能强大且广受欢迎的移动浏览器 提供了丰富的功能和个性化选项 其中包括设置动态ip地址的功能 通过设置动态ip地址 您可以改变您的网络访问路径 保护个人隐私 或者访问被地理限制的内容 接下来 我将为您介绍在手机浏览器中如何
  • Count the string【KMP】

    It is well known that AekdyCoin is good at string problems as well as number theory problems When given a string s we ca
  • 深度学习里面正则化的理解

    一 正则化的概念与用处 正则化 也叫规范化 在神经网络里主要是对代价函数高次项添加一些惩罚 防止其过拟合 相当于对某些特征的权重施加惩罚 降低其影响权重 防止过拟合 欠拟合时需要去掉正则化 因为本来就特征不足 再惩罚一下就更没用了 正则化目
  • JCenter() 与 mavenCenter() 的区别

    网络上有两种Maven仓库 分别是mavenCenter 和jCenter 1 Maven Central 则是由sonatype org维护的Maven仓库 http jcenter bintray com 2 jcenter是一个由 b
  • ARM开发——搭建嵌入式开发环境

    ckermit串口工具的下载 sudo apt get install ckermit 如果我们有新的串口连接上 我们可以通过查看 dev 来看连接的数据 ckermit 配置文件的配置 kermrc set line dev ttyUSB
  • jemter接口测试+断言+参数化+接口关联实战教程

    此次实例准备 jmeter实战接口申请地址 https www tianapi com 实例信息 请求10次身份证归属地查询接口 提取响应数据的星座信息作为请求参数 给星座运势查询接口使用 即接口之间关联调用 下面是两个接口的基本信息 A
  • 【Unity】一个场景跳转到多个场景的解决方案

    在某些情况下 比如我们需要设计一个探索类游戏 那么一个场景可以根据选择的不同 跳转至多个场景 甚至能够回跳场景 那么在这种情况下 我们该如何进行多场景的精确跳转呢 思路 假设角色走到某一扇门时 场景将进行切换 如果场景切换是非线性的 那么就
  • python入门选择题

    下列哪个是Python的注释符号 A B C D 答案 B 解析 在Python中 使用 来进行注释 以 开头的行也被认为是注释 在Python中 如何将两个整数相除并得到一个浮点数 A 使用 运算符 B 使用 运算符 C 使用 运算符 D
  • office2021安装教程

    需要用到的工具 office tool plus https otp landian vip zh cn 进到官网点立即下载 下载 包含框架 推荐 下载好解压 运行officetool plus 选择部署 在这里可以看到电脑已存在的offi
  • Spring依赖注入

    一 什么是依赖注入 DI Dependency Injection 依赖注入是指在 Spring IOC 容器创建对象的过程中 将所依赖的对象通过配置进行注入 我们可以通过依赖注入的方式来降低对象间的耦合度 在软件工程中 对象之间的耦合度就