Container Extension Points
Spring ์ปจํ
์ด๋ ํ์ฅ ํฌ์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ApplicationContext
ํด๋์ค๋ฅผ ์๋ธํด๋์ฑํ์ง ์๊ณ ๋ Spring IoC ์ปจํ
์ด๋๋ฅผ ํ์ฅํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์ ํ์ฅํ ์ ์๋ ์ฌ๋ฌ ํตํฉ ์ธํฐํ์ด์ค๊ฐ ์์ผ๋ฉฐ, ์ด ์ค์์ BeanPostProcessor
, BeanFactoryPostProcessor
, ๊ทธ๋ฆฌ๊ณ FactoryBean
๊ฐ์ ์ธํฐํ์ด์ค๊ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
Customizing Beans by Using a BeanPostProcessor
BeanPostProcessor
์ธํฐํ์ด์ค๋ Spring ์ปจํ
์ด๋๊ฐ Bean์ ์ธ์คํด์คํํ๊ณ , ์ค์ ํ๊ณ , ์ด๊ธฐํํ ํ์ ํธ์ถ๋๋ ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ปจํ
์ด๋์ ๊ธฐ๋ณธ ์ธ์คํด์คํ ๋ก์ง์ด๋ ์์กด์ฑ ํด๊ฒฐ ๋ก์ง์ ๋ฎ์ด์ฐ๊ฑฐ๋ ์ฌ์ฉ์ ์ ์ ๋ก์ง์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๊ตฌ์ฑ ๋ฐ ์คํ ์์ ์ ์ด
์ฌ๋ฌ BeanPostProcessor
์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ, ์ด๋ ์คํ ์์๋ฅผ order
์์ฑ์ ํตํด ์ ์ดํ ์ ์์ต๋๋ค. ๋จ, ์ด ์์ฑ์ Ordered
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ์๋ง ์ค์ ํ ์ ์์ต๋๋ค.
์ง์ BeanPostProcessor
๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์๋ Ordered
์ธํฐํ์ด์ค ๊ตฌํ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์๋ ์๋ฆฌ
BeanPostProcessor
์ธ์คํด์ค๋ Spring IoC ์ปจํ
์ด๋๊ฐ Bean ์ธ์คํด์ค๋ฅผ ์์ฑํ ํ ํด๋น Bean์ ๋ํด ํ์ฒ๋ฆฌ ์์
์ ์ํํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๋ ๊ฐ์ง ์ฃผ์ ์ฝ๋ฐฑ ๋ฉ์๋๊ฐ ์คํ๋ฉ๋๋ค:
postProcessBeforeInitialization
: ์ปจํ ์ด๋์ ์ด๊ธฐํ ๋ฉ์๋๊ฐ ํธ์ถ๋๊ธฐ ์ , ์ปจํ ์ด๋๊ฐ ์ด ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.postProcessAfterInitialization
: ์ด๊ธฐํ ๋ฉ์๋ ํธ์ถ ํ, ์ด ๋ฉ์๋๋ฅผ ํตํด ์ถ๊ฐ ์์ ์ ํ ์ ์์ต๋๋ค.
BeanPostProcessor์ ๋ฒ์
BeanPostProcessor
์ธ์คํด์ค๋ ์ปจํ
์ด๋ ๋จ์๋ก ์ค์ฝํ๊ฐ ์ง์ ๋ฉ๋๋ค. ์ด๋ ์ปจํ
์ด๋ ๊ณ์ธต์ ์ฌ์ฉํ ๋๋ง ๊ด๋ จ์ด ์์ต๋๋ค.
ํ ์ปจํ
์ด๋์ ์ ์๋ BeanPostProcessor
๋ ํด๋น ์ปจํ
์ด๋์ Bean๋ง ํ์ฒ๋ฆฌํ๋ฉฐ, ๋ค๋ฅธ ์ปจํ
์ด๋์ ์ ์๋ Bean์ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค. ๋ ์ปจํ
์ด๋๊ฐ ๋์ผํ ๊ณ์ธต์ ์ผ๋ถ์ด๋๋ผ๋ ํ์ฒ๋ฆฌ๋์ง ์์ต๋๋ค.
Bean ์ ์ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ
์ค์ Bean ์ ์(์ฆ, Bean์ ์ ์ํ๋ ์ฒญ์ฌ์ง)๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด BeanFactoryPostProcessor
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ํ์ฌ Bean์ด ์ธ์คํด์คํ๋๊ธฐ ์ ์ Bean์ ์ ์๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
์ฝ๋ฐฑ ๋ฉ์๋
BeanPostProcessor
์ธํฐํ์ด์ค๋ ์ ํํ ๋ ๊ฐ์ ์ฝ๋ฐฑ ๋ฉ์๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด ํด๋์ค๊ฐ ํ์ฒ๋ฆฌ๊ธฐ๋ก ์ปจํ
์ด๋์ ๋ฑ๋ก๋๋ฉด, ์ปจํ
์ด๋์์ ์์ฑ๋ ๊ฐ Bean ์ธ์คํด์ค์ ๋ํด ํ์ฒ๋ฆฌ๊ธฐ๊ฐ ๋ ๋ฒ ํธ์ถ๋ฉ๋๋ค.
์ฒซ ๋ฒ์งธ๋ Bean ์ด๊ธฐํ ๋ฉ์๋ ํธ์ถ ์ , ๋ ๋ฒ์งธ๋ ์ด๊ธฐํ ํ์ ๋๋ค. ํ์ฒ๋ฆฌ๊ธฐ๋ Bean ์ธ์คํด์ค์ ๋ํด ์๋ฌด ์์ ๋ ์ํํ์ง ์๊ฑฐ๋, Bean ์ธ์คํด์ค๋ฅผ ํ๋ก์๋ก ๊ฐ์ธ๋ ๋ฑ์ ์์ ์ ํ ์ ์์ต๋๋ค.
Spring AOP ์ธํ๋ผ ํด๋์ค ์ค ์ผ๋ถ๋ ์ด ํ์ฒ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ๋ํ ๋ก์ง์ ์ ๊ณตํฉ๋๋ค.
์๋ ๊ฐ์ง ๋ฐ ๋ฑ๋ก
ApplicationContext
๋ BeanPostProcessor
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ Bean์ ์๋์ผ๋ก ๊ฐ์งํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ Bean์ด ์์ฑ๋ ๋ ์ด๋ฅผ ํธ์ถํ ์ ์๋๋ก BeanPostProcessor
๋ฅผ ๋ฑ๋กํฉ๋๋ค.
Bean ํ์ฒ๋ฆฌ๊ธฐ๋ ์ปจํ ์ด๋ ๋ด์์ ๋ค๋ฅธ Bean๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌ๋ ์ ์์ต๋๋ค.
BeanPostProcessor์ ํ๋ก๊ทธ๋จ ๋ฐฉ์ ๋ฑ๋ก
BeanPostProcessor
๋ฑ๋ก์ ์ํ ๊ถ์ฅ ๋ฐฉ๋ฒ์ ApplicationContext
์๋ ๊ฐ์ง๋ฅผ ํตํด ์ด๋ฃจ์ด์ง์ง๋ง, ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ConfigurableBeanFactory
์ addBeanPostProcessor
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฑ๋กํ ์๋ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๋ฑ๋ก ์ ์ ์กฐ๊ฑด๋ถ ๋ก์ง์ ํ๊ฐํ๊ฑฐ๋ ์ปจํ ์ด๋ ๊ณ์ธต์์ BeanPostProcessor๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ์์ผ๋ก ๋ฑ๋ก๋ BeanPostProcessor๋ Ordered
์ธํฐํ์ด์ค๋ฅผ ์กด์คํ์ง ์์ผ๋ฉฐ, ๋ฑ๋ก๋ ์์๊ฐ ๊ณง ์คํ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
AOP ์๋ ํ๋ก์ฑ๊ณผ BeanPostProcessor
BeanPostProcessor
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ ํน๋ณํ๋ฉฐ, ์ปจํ
์ด๋์์ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋ชจ๋ BeanPostProcessor
์ธ์คํด์ค์ ์ง์ ์ฐธ์กฐ๋๋ Bean์ ์ ํ๋ฆฌ์ผ์ด์
์ปจํ
์คํธ์ ํน๋ณํ ์์ ๋จ๊ณ์์ ์ธ์คํด์คํ๋ฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ชจ๋ BeanPostProcessor
์ธ์คํด์ค๊ฐ ์ ๋ ฌ๋ ๋ฐฉ์์ผ๋ก ๋ฑ๋ก๋๊ณ , ์ดํ ์์ฑ๋ Bean์ ๋ํด ์ ์ฉ๋ฉ๋๋ค. AOP ์๋ ํ๋ก์ฑ์ BeanPostProcessor
๋ก ๊ตฌํ๋๊ธฐ ๋๋ฌธ์, BeanPostProcessor
์ธ์คํด์ค๋ ๊ทธ๊ฒ์ด ์ง์ ์ฐธ์กฐํ๋ Bean์ ์๋ ํ๋ก์ฑ ๋์์ด ์๋๋ฉฐ, ๋ฐ๋ผ์ ์ ์คํํธ๊ฐ ์ ์ฉ๋์ง ์์ต๋๋ค.
๋ง์ฝ BeanPostProcessor
์ @Autowired
๋๋ @Resource
๋ก ์ฐ๊ฒฐ๋ Bean์ด ์๋ค๋ฉด, Spring์ด ํ์
๋งค์นญ ์์กด์ฑ ํ๋ณด๋ฅผ ์ฐพ๋ ๊ณผ์ ์์ ์์์น ๋ชปํ Bean์ ์ ๊ทผํ ์ ์์ต๋๋ค.
์ด๋ก ์ธํด ํด๋น Bean์ด ์๋ ํ๋ก์ฑ ๋๋ ๋ค๋ฅธ ํ์ฒ๋ฆฌ ์์ ์ ์ ํฉํ์ง ์๊ฒ ๋ ์ ์์ต๋๋ค.
Customizing Configuration Metadata with a BeanFactoryPostProcessor
BeanFactoryPostProcessor
์ธํฐํ์ด์ค๋ Spring IoC ์ปจํ
์ด๋๊ฐ Bean์ ์ธ์คํด์คํํ๊ธฐ ์ ์ Bean ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋ณ๊ฒฝํ ์ ์๋ ํ์ฅ ํฌ์ธํธ์
๋๋ค.
์ด๋ฅผ ํตํด ์ปจํ ์ด๋๊ฐ ์ค์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Bean์ ์ธ์คํด์คํํ๊ธฐ ์ ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
๋์ ๋ฐฉ์
BeanFactoryPostProcessor
๋ ์ค์ ๋ฉํ๋ฐ์ดํฐ์ ๋ํด ์๋ํ๋ฏ๋ก, Bean์ด ์ธ์คํด์คํ๋๊ธฐ ์ Bean ์ ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.์ฌ๋ฌ
BeanFactoryPostProcessor
์ธ์คํด์ค๋ฅผ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ,order
์์ฑ์ ์ฌ์ฉํด ์คํ ์์๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๋จ, ์ด ์์ฑ์Ordered
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ์๋ง ์ค์ ํ ์ ์์ต๋๋ค.
BeanFactoryPostProcessor
๋ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, Bean ์ธ์คํด์ค๋ฅผ ์ง์ ์์ ํ๋ ค๋ฉด BeanPostProcessor
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ํฉํฉ๋๋ค.
Last updated