<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.moorper.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.moorper.com/feed.php">
        <title>Moorper Wiki - blog:java</title>
        <description>我等采石之人，当心怀建造大教堂之愿景。</description>
        <link>https://wiki.moorper.com/</link>
        <image rdf:resource="https://wiki.moorper.com/_media/wiki:dokuwiki.svg" />
       <dc:date>2026-04-08T21:06:13+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.moorper.com/blog:java:field-injection-is-not-recommended"/>
                <rdf:li rdf:resource="https://wiki.moorper.com/blog:java:mapstruct-object-factories"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.moorper.com/_media/wiki:dokuwiki.svg">
        <title>Moorper Wiki</title>
        <link>https://wiki.moorper.com/</link>
        <url>https://wiki.moorper.com/_media/wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="https://wiki.moorper.com/blog:java:field-injection-is-not-recommended">
        <dc:format>text/html</dc:format>
        <dc:date>2021-11-18T14:45:40+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>FIELD INJECTION IS NOT RECOMMENDED</title>
        <link>https://wiki.moorper.com/blog:java:field-injection-is-not-recommended</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;field-injection-is-not-recommended&quot;&gt;FIELD INJECTION IS NOT RECOMMENDED&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
在 spring boot 开发中，如果你使用了 &lt;code&gt;@Autowired&lt;/code&gt; 注解来注入多态对象可能会收获一个提示：
&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;no&quot;&gt;
 field injection is not recommended&lt;/div&gt;&lt;/blockquote&gt;

&lt;p&gt;
这个提示并不影响程序的正常运行，只是使用了一些不太建议的编码方式。
&lt;/p&gt;

&lt;p&gt;
这里有一篇文章，很好的说明了这个问题，以及该怎么去解决这个问题。
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://www.vojtechruzicka.com/field-dependency-injection-considered-harmful/&quot; rel=&quot;ugc nofollow noopener&quot;&gt;Field Dependency Injection Considered Harmful&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="https://wiki.moorper.com/blog:java:mapstruct-object-factories">
        <dc:format>text/html</dc:format>
        <dc:date>2021-11-11T02:26:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>MapStruct Object factories</title>
        <link>https://wiki.moorper.com/blog:java:mapstruct-object-factories</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;mapstruct-object-factories&quot;&gt;MapStruct Object factories&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
日常在使用 &lt;code&gt;MapStruct&lt;/code&gt; 时 target object 都是由 &lt;code&gt;MapStruct&lt;/code&gt; 直接调用 &lt;code&gt;NoArgsConstruct&lt;/code&gt; 生成的。
&lt;/p&gt;

&lt;p&gt;
还有一种场景就是 target object 有外部依赖需要注入，或者没有 &lt;code&gt;NoArgsConstruct&lt;/code&gt; 方法供我们调用，这里就需要我们配置 &lt;code&gt;MapStruct&lt;/code&gt; 的 &lt;code&gt;@Mapper()&lt;/code&gt; 注解 的 &lt;code&gt;uses&lt;/code&gt; 参数。
&lt;/p&gt;

&lt;p&gt;
这个参数支持配置单个或者多个 &lt;code&gt;ObjectFactory&lt;/code&gt; 工厂类，有两类实现方法，一类是直接写 target object 的生成方法，另一类是写通用 object 的生成方法，示例代码如下，摘自官方文档
&lt;/p&gt;
&lt;pre class=&quot;code java&quot;&gt;@&lt;a target=&quot;_blank&quot; href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+component&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;Component&lt;/span&gt;&lt;/a&gt;
&lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; DtoFactory &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
     &lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; CarDto createCarDto&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
         &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// ... custom factory logic&lt;/span&gt;
     &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code java&quot;&gt;@&lt;a target=&quot;_blank&quot; href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+component&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;Component&lt;/span&gt;&lt;/a&gt;
&lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; EntityFactory &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
     &lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;T &lt;span class=&quot;kw1&quot;&gt;extends&lt;/span&gt; BaseEntity&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; T createEntity&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;@TargetType Class&lt;span class=&quot;sy0&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;sy0&quot;&gt;&amp;gt;&lt;/span&gt; entityClass&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
         &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// ... custom factory logic&lt;/span&gt;
     &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class=&quot;code java&quot;&gt;@Mapper&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;componentModel &lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&amp;quot;spring&amp;quot;&lt;/span&gt;, uses&lt;span class=&quot;sy0&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt; DtoFactory.&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt;, EntityFactory.&lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;interface&lt;/span&gt; CarMapper &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
    CarDto carToCarDto&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Car car&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    Car carDtoToCar&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;CarDto carDto&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;sy0&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;
另外 &lt;code&gt;MapStruct&lt;/code&gt; 在 &lt;code&gt;ObjectFactory&lt;/code&gt; 中支持为 &lt;code&gt;create&lt;/code&gt; 添加一个 &lt;code&gt;@ObjectFactory&lt;/code&gt; 注解，当使用该注解时可以将 convertor 中 source object 作为入参使用，示例如下：
&lt;/p&gt;
&lt;pre class=&quot;code java&quot;&gt;&lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;class&lt;/span&gt; DtoFactory &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
&amp;nbsp;
     @&lt;a target=&quot;_blank&quot; href=&quot;http://www.google.com/search?hl=en&amp;amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+objectfactory&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;ObjectFactory&lt;/span&gt;&lt;/a&gt;
     &lt;span class=&quot;kw1&quot;&gt;public&lt;/span&gt; CarDto createCarDto&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;Car car&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
         &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;co1&quot;&gt;// ... custom factory logic&lt;/span&gt;
     &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;MapStruct Object factories&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;mapstruct-object-factories&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-1540&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;参考文献&quot;&gt;参考文献&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://mapstruct.org/documentation/stable/reference/html/#object-factories&quot; class=&quot;urlextern&quot; target=&quot;_blank&quot; title=&quot;https://mapstruct.org/documentation/stable/reference/html/#object-factories&quot; rel=&quot;ugc nofollow noopener&quot;&gt;object factories - 官方文档&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.moorper.com/tag:java?do=showtag&amp;amp;tag=java&quot; class=&quot;wikilink1&quot; title=&quot;tag:java&quot; rel=&quot;tag&quot;&gt;java&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.moorper.com/tag:mapstruct?do=showtag&amp;amp;tag=mapstruct&quot; class=&quot;wikilink1&quot; title=&quot;tag:mapstruct&quot; rel=&quot;tag&quot;&gt;mapstruct&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.moorper.com/tag:dto?do=showtag&amp;amp;tag=dto&quot; class=&quot;wikilink1&quot; title=&quot;tag:dto&quot; rel=&quot;tag&quot;&gt;dto&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u53c2\u8003\u6587\u732e&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;\u53c2\u8003\u6587\u732e&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:4,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;1541-&amp;quot;} --&gt;</description>
    </item>
</rdf:RDF>
