{"componentChunkName":"component---src-templates-post-template-jsx","path":"/history/posts/2020-11-14--001.md","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"cc78523f-3685-5c7c-877c-40ae859a205f","html":"<h3># 스프링 컨테이너 생성</h3>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">ApplicationContext</span> applicationContext \n      <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AnnotationConfigApplicationContext</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">AppConfig</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/bd82c/001-01.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 47.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAABI0lEQVQoz42S2Y6DMAxF+X0+qd/BS0VZHiirCpQWxF7PHEtB6aga1dKVYye+XmJHfmXfd/lPlmWRcRxlnmdpmkbO57PC8zy18XM/TZM4p9NJ1nWV6/UqSZJIlmXi+74EQSCXy0XSNJW6rqXrOgUEt9tNNX70/X6Xx+MhRVGI47quEhKY57kCYhLgi+NYg2yhI6retu3NTwJHvhAqe71e2hKVRFGkXQDuaJd7JSQbhtEGZq7MhyA0ZIyiqiolp3JIaZmKsd8qtAmB+RAIzceYdodh0CTY+A/C5/OpmdGfhPnahJDYv2rOvDsIQVmWetH3vZ7DMNQHBNESlRgC8Pd8zJABA34TBysBIMU2K/ONaIW0SwCBlP1phqySncwkstG2ra7ZD2IhAUimpjaEAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 01\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/d9199/001-01.png\"\n        srcset=\"/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/8ff5a/001-01.png 240w,\n/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/e85cb/001-01.png 480w,\n/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/d9199/001-01.png 960w,\n/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/07a9c/001-01.png 1440w,\n/devHistoryBlog/static/aca2881e7fd310641dee14f2b16c710f/bd82c/001-01.png 1585w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<h3># 스프링 빈 등록</h3>\n<ul>\n<li>빈 이름은 메서드 이름을 사용</li>\n<li>빈 이름을 직접 부여할 수도 있다 @Bean(name”memberService2”)</li>\n</ul>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/0bdcb/001-02.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 45.833333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB/UlEQVQoz32SW2saQRiG91+00JsYozG7q7s7e3A9BJH8ggYkGtKf2CbYoBVy63Vzo4LnMx5Q1/Ws4NuZoZRcdeBldgfmmfd7v094eysgn8/hV6GA9/ffqFQqKJfLKJfKfC+VSnCWDo7HI1arFbbbLabTKer1OhqNBlqtFjabzT8JETMENRiATnQYpoG4TRChUmJBhFQFXu8V8rk8TqcT5vM5DocDBw+HQ3S7Xbiui/1+z2HsXIiGCbSQSIEaCCGwDA2mSaDSXQtr8Ek+vOZ+4nw+Y7fbcYcMMplMMBqNMJvNOIwt9qgQtzUYiohYNIpEMom7ZAL2rY4bEoBEzz3XF3jOfYd7WGIwHKBarfJS1+s1HMfh36x8FgN3SIgKv98PVSPQTQsaLV2WZYiiCFmRcem/xMvrM9yjg96wxy+z3NjlTqeDZrPJ1ev1eAXCbYTA1GRYlsWBUdtAImYiHtERsiUK9FCHP7A6umi1m9xRrVbDeDxGv99Hu93mYnAWhRCzdRBFgmnoNDuLNsREJGyC2CpCehBXN168UOD6tEJ/2OdOmJZLGsFgwKHsnzWJ5SvoSgCi7wKyJEKSg9AoXAtJuJa9ND8PPn/5hGw2y0Nno/O/xRonPD19QyqVQiaTRjqdxsNfpR8yeMw84v7rPYrFIh+XxWLBXXycu49iuf4BRRAE4LPOLWMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 02\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/d9199/001-02.png\"\n        srcset=\"/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/8ff5a/001-02.png 240w,\n/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/e85cb/001-02.png 480w,\n/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/d9199/001-02.png 960w,\n/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/07a9c/001-02.png 1440w,\n/devHistoryBlog/static/489ee6d9d6f2bbc7cd102bf6203b6f4c/0bdcb/001-02.png 1579w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<h3># 스프링 빈 조회</h3>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">  <span class=\"token class-name\">AnnotationConfigApplicationContext</span> ac \n          <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">AnnotationConfigApplicationContext</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">AppConfig</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Configuration</span>\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">AppConfig</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token annotation punctuation\">@Bean</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">DataService</span> <span class=\"token function\">dataService</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">DataServiceImpl</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"빈 이름으로 조회\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanByName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">DataService</span> dataService <span class=\"token operator\">=</span> ac<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dataService\"</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">DataService</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertThat</span><span class=\"token punctuation\">(</span>dataService<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isInstanceOf</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DataServiceImpl</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"이름 없이 타입으로만 조회\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanByType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">DataService</span> dataService <span class=\"token operator\">=</span> ac<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DataService</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertThat</span><span class=\"token punctuation\">(</span>dataService<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isInstanceOf</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DataServiceImpl</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"구체 타입으로 조회\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanByImplName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 좋은 코드는 아니다.</span>\n    <span class=\"token comment\">// 항상 역활과 구현을 구분해야 한다.</span>\n    <span class=\"token comment\">// 그리고 역할에 의존해야 한다.</span>\n    <span class=\"token class-name\">DataService</span> dataService <span class=\"token operator\">=</span> ac<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"dataService\"</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">DataServiceImpl</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertThat</span><span class=\"token punctuation\">(</span>dataService<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isInstanceOf</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DataServiceImpl</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"빈 이름으로 조회 실패\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanByNameX</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">assertThrows</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">NoSuchBeanDefinitionException</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span> \n        <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-></span> ac<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"xxx\"</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">DataService</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>\n<h3>스프링 빈 조회 - 상속관계</h3>\n<ul>\n<li>부모 타입으로 조회하면 자식 타입도 함께 조회</li>\n<li>Object 타입으로 조회하면 모든 스프링 빈을 조회</li>\n</ul>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/ce0a7/001-03.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 43.75%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABFUlEQVQoz21SiaqEQAzz/39PvHW971sRvLukMDLue4VSnThp0qokSUJxHFOapuR5HrmuS7quE84R930/idj3nZqmoTzPXxjyOA5SgiAg3/cJ1TAMJjRNk8qyJDlkQmBoeF3XC2NC27YJ6TgOfT6fB5TVyQF1WZYxaV3XL4wJYU/TNE6oPM/zj00oGceRbaKKwHNRFDQMA99DskJYRWdB8EuIzlEUsQvRELFtG58jl2XhxgrmBXVt277m8fssE8p4GIa8TJw/hLBdVdW/6lDneaa+77nCnsDFu6hYGBOqqkpd171UiYo5QQFwXLQsi8mnaeIlYjHAsHW4UPARLq3r+gxWpNgqHOAiiDAeQQIxWArc4V9Ggy974q+7XRjmPgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"001 03\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/d9199/001-03.png\"\n        srcset=\"/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/8ff5a/001-03.png 240w,\n/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/e85cb/001-03.png 480w,\n/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/d9199/001-03.png 960w,\n/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/07a9c/001-03.png 1440w,\n/devHistoryBlog/static/054a303856f5ecf75599435a8d9791c8/ce0a7/001-03.png 1590w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">AnnotationConfigApplicationContext</span> acExtends <span class=\"token operator\">=</span> \n          <span class=\"token keyword\">new</span> <span class=\"token class-name\">AnnotationConfigApplicationContext</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">TestConfig</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token annotation punctuation\">@Configuration</span>\n  <span class=\"token keyword\">static</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">TestConfig</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token annotation punctuation\">@Bean</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">DataPolicy</span> <span class=\"token function\">rateDataPolicy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">RateDataPolicy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token annotation punctuation\">@Bean</span>\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">DataPolicy</span> <span class=\"token function\">fixDataPolicy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">FixDataPolicy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"부모 타입으로 조회시, 자식이 둘 이상 있으면, 중복 오류가 발생한다.\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanByParentTypeDuplicate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">assertThrows</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">NoUniqueBeanDefinitionException</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">,</span>\n      <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-></span> acExtends<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DataPolicy</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"부모 타입으로 조회시, 자식이 둘 이상 있으면, 빈 이름을 지정하면 된다.\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanByParentTypeBeanName</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">RateDataPolicy</span> rateDataPolicy <span class=\"token operator\">=</span> acExtends<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"rateDataPolicy\"</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">RateDataPolicy</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertThat</span><span class=\"token punctuation\">(</span>rateDataPolicy<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isInstanceOf</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">RateDataPolicy</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"특정 하위 타입으로 조회\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findBeanBySubType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">RateDataPolicy</span> rateDataPolicy <span class=\"token operator\">=</span> acExtends<span class=\"token punctuation\">.</span><span class=\"token function\">getBean</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">RateDataPolicy</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertThat</span><span class=\"token punctuation\">(</span>rateDataPolicy<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isInstanceOf</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">RateDataPolicy</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token annotation punctuation\">@Test</span>\n  <span class=\"token annotation punctuation\">@DisplayName</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"부모 타입으로 모두 조회하기\"</span><span class=\"token punctuation\">)</span>\n  <span class=\"token keyword\">void</span> <span class=\"token function\">findAllBeanByParentType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token class-name\">Map</span><span class=\"token generics\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">DataPolicy</span><span class=\"token punctuation\">></span></span> beansOfType <span class=\"token operator\">=</span> acExtends<span class=\"token punctuation\">.</span><span class=\"token function\">getBeansOfType</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DataPolicy</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">class</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token function\">assertThat</span><span class=\"token punctuation\">(</span>beansOfType<span class=\"token punctuation\">.</span><span class=\"token function\">size</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">isEqualTo</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> key <span class=\"token operator\">:</span> beansOfType<span class=\"token punctuation\">.</span><span class=\"token function\">keySet</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"key = \"</span> <span class=\"token operator\">+</span> key <span class=\"token operator\">+</span> <span class=\"token string\">\" value = \"</span> <span class=\"token operator\">+</span> beansOfType<span class=\"token punctuation\">.</span><span class=\"token function\">get</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span></code></pre></div>","fields":{"tagSlugs":["/tags//"],"slug":"/history/posts/2020-11-14--001.md"},"frontmatter":{"title":"[스프링 핵심 원리 리뷰] Container Bean 생성","tags":[""],"date":"2020-11-14","description":""}}},"pageContext":{"slug":"/history/posts/2020-11-14--001.md"}},"staticQueryHashes":[]}