μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Vue.js
- μκ³ λ¦¬μ¦
- κΈ°μ΄100μ
- go
- μ€νλ§
- spring security
- Spring Boot
- Postman
- Python
- Codeup
- μ€λΈμ
- ν΄λ¦° μ½λ
- Spring
- Gradle
- νμ΄μ¬
- golang
- java
- Git
- JPA
- 둬볡
- MySQL
- thymeleaf
- mariadb
- ν°μ€ν 리μ±λ¦°μ§
- ν΄λ¦°μ½λ
- H2 μ€μΉ
- κ°μ¬μ€
- springboot
- μ½λμ
- GitHub
- Today
- Total
nyximos.log
[Spring] λΉ μ€μ½ν λ³Έλ¬Έ
π€ λΉ μ€μ½νλ?
λΉμ΄ μ‘΄μ¬ν μ μλ λ²μ
- μ±κΈν€ : κΈ°λ³Έ μ€μ½ν, μ€νλ§ μ»¨ν μ΄λμ μμκ³Ό μ’ λ£κΉμ§ μ μ§λλ κ°μ₯ λμ λ²μμ μ€μ½νμ΄λ€.
- νλ‘ν νμ : νλ‘ν νμ λΉμ μμ±+μμ‘΄κ΄κ³ μ£Όμ κΉμ§λ§ κ΄μ¬νλ λ§€μ° μ§§μ λ²μμ μ€μ½νμ΄λ€.
- μΉ κ΄λ ¨ μ€μ½ν
- request : μΉ μμ²μ΄ λ€μ΄μ€κ³ λκ°λ κΉμ§ μ μ§λλ μ€μ½νμ΄λ€.
- session : μΉ μΈμ μ΄ μμ±λκ³ μ’ λ£λ λκΉμ§ μ μ§λλ μ€μ½νμ΄λ€.
- application : μΉ μλΈλ¦Ώ 컨ν μ€νΈμ κ°μ λ²μλ‘ μ μ§λλ μ€μ½νμ΄λ€.
λΉ μ€μ½ν μ§μ λ°©μ
1. μ»΄ν¬λνΈ μ€μΊ μλ λ±λ‘
@Scope("prototype")
@Component
public class HelloBean{}
2. μλ λ±λ‘
@Scope("prototype")
@Bean
PrototypeBean HelloBean(){
return new HelloBean();
}
π©π¬ νλ‘ν νμ μ€μ½ν
μ€νλ§ μ»¨ν μ΄λλ
μ±κΈν€ μ€μ½νμ λΉμ μ‘°νν λ νμ κ°μ μΈμ€ν΄μ€μ μ€νλ§ λΉμ λ°ννλ€.
νλ‘ν νμ μ€μ½νλ₯Ό μ‘°νν λλ νμ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό μμ±ν΄ λ°ννλ€.
π μ±κΈν€ λΉ μμ²
- μ±κΈν€ μ€μ½νμ λΉμ μ€νλ§ μ»¨ν μ΄λμ μμ²
- μ€νλ§ μ»¨ν μ΄λλ λ³ΈμΈμ΄ κ΄λ¦¬νλ μ€νλ§ λΉμ λ°ν
- μ΄ν μ€νλ§ μ»¨ν μ΄λμ κ°μ μμ²μ΄ μλ κ°μ κ°μ²΄ μΈμ€ν΄μ€μ μ€νλ§ λΉμ λ°ν
π νλ‘ν νμ λΉ μμ²
- νλ‘ν νμ μ€μ½νμ λΉμ μ€νλ§ μ»¨ν μ΄λμ μμ²
- μ€νλ§ μ»¨ν μ΄λκ° νλ‘ν νμ λΉ μμ± + νμν μμ‘΄κ΄κ³ μ£Όμ
- μ€νλ§ μ»¨ν μ΄λλ μμ±ν νλ‘ν νμ λΉμ ν΄λΌμ΄μΈνΈμ λ°ν
- μ΄ν μ€νλ§ μ»¨ν μ΄λμ κ°μ μμ²μ΄ μ€λ©΄ νμ μλ‘μ΄ νλ‘ν νμ λΉμ μμ±ν΄μ λ°ν
π’ μ€νλ§ μ»¨ν μ΄λ
πβοΈ νλ‘ν νμ λΉ μμ±, μμ‘΄κ΄κ³ μ£Όμ , μ΄κΈ°νκΉμ§ μ²λ¦¬
π βοΈ μμ±λ νλ‘ν νμ λΉ κ΄λ¦¬
→ ν΄λΌμ΄μΈνΈκ° νλ‘ν νμ λΉμ κ΄λ¦¬νλ€.
@PreDestroy κ°μ μ’ λ£ λ©μλκ° νΈμΆλμ§ μλλ€.
π€·βοΈ νλ‘ν νμ μ€μ½ν - μ±κΈν€ λΉκ³Ό ν¨κ» μ¬μ©μ λ¬Έμ μ
νλ‘ν νμ μ€μ½νμ λΉμ μ±κΈν€ λΉκ³Ό ν¨κ» μ¬μ©ν λλ μλν λλ‘ μ λμνμ§ μλλ€.
μ€νλ§μ μΌλ°μ μΌλ‘ μ±κΈν€ λΉμ μ¬μ©νλ―λ‘ μ±κΈν€ λΉμ΄ νλ‘ν νμ λΉμ μ¬μ©νκ² λλ€.
νλ‘ν νμ λΉμ΄ μλ‘ μμ±μ΄ λκΈ΄ νμ§λ§ μ±κΈν€ λΉκ³Ό ν¨κ» κ³μ μ μ§λλ€.
(κ³Όκ±°μ μ±κΈν€ λΉ μμ±μμ μ μ£Όμ μ΄ λλ νλ‘ν νμ λΉμ κ°μ§κ³ μμ΄μ)
μ¬μ©ν λλ§λ€ μλ‘ μμ±ν΄μ μ¬μ©νλ κ±° μλπ΅
πβοΈ νλ‘ν νμ μ€μ½ν - μ±κΈν€ λΉκ³Ό ν¨κ» μ¬μ©μ Providerλ‘ λ¬Έμ ν΄κ²°
π DL Dependency Lookup
μμ‘΄κ΄κ³ μ‘°ν(νμ)
DIμ λ€λ₯΄κ² μ§μ νμν μμ‘΄κ΄κ³λ₯Ό μ°Ύλ κ²
μ§μ ν νλ‘ν νμ λΉμ 컨ν μ΄λμμ λμ μ°Ύμμ£Όλ DL κΈ°λ₯μ μ 곡νλ κ² νμνλ€ !
ObjectFactory, ObjectProvider
μ§μ ν λΉμ 컨ν μ΄λκ° λμ μ°Ύμμ£Όλ DL κΈ°λ₯ μ 곡
ObjectProvider : ObjectFactory+νΈμκΈ°λ₯ μΆκ°
μ€νλ§ μΈμ μμ‘΄κ΄κ³ μΆκ°(λΌμ΄λΈλ¬λ¦¬ μΆκ°) νμ μμ΄μ νΈλ¦¬, μ€νλ§μ μμ‘΄
prototypeBeanProviderλ₯Ό μμ±ν
prototypeBeanProvider.getObject()λ‘ μλ‘μ΄ νλ‘ν νμ λΉ μμ±
ObjectProviderμ getObject() : μ€νλ§ μ»¨ν μ΄λλ₯Ό ν΅ν΄ ν΄λΉ λΉ μ°Ύμμ λ°ν
JSR-330 Provider
javax.inject.Provider
JSR-330 μλ° νμ€ μ¬μ©
μ°λ €λ©΄ javax.inject:javax.inject:1 λΌμ΄λΈλ¬λ¦¬λ₯Ό gradleμ μΆκ°ν΄μΌ νλ€.
μ€νλ§μ΄ μλ 컨ν μ΄λμμ μ¬μ©νλ €λ©΄ μλ° νμ€ μ¬μ©
provider μμ±ν
provider.get() λ©μλλ‘ μλ‘μ΄ νλ‘ν νμ λΉ μμ±
providerμ get() : μ€νλ§ μ»¨ν μ΄λλ₯Ό ν΅ν΄ ν΄λΉ λΉ μ°Ύμμ λ°ν
π μΉ μ€μ½ν
μΉ νκ²½μμλ§ λμ
μ€νλ§μ΄ ν΄λΉ μ€μ½νμ μ’ λ£ μμ κΉμ§ κ΄λ¦¬ν΄μ€
μ’ λ£ λ©μλ νΈμΆλ¨
- request : HTTP μμ²μ΄ λ€μ΄μλ€ λκ°λκΉμ§ μ μ§, HTTP μμ²λ§λ€ λ³λμ λΉ μΈμ€ν΄μ€ μμ±, κ΄λ¦¬
- session : HTTP Sessionκ³Ό λμΌν μλͺ μ£ΌκΈ° κ°μ§λ μ€μ½ν
- application : μλΈλ¦Ώ 컨ν μ€νΈ(ServletContext)μ λμΌν μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λ μ€μ½ν
- websocket : μΉ μμΌκ³Ό λμΌν μλͺ μ£ΌκΈ°λ₯Ό κ°μ§λ μ€μ½ν
π μ€μ½νμ νλ‘μ
CGLIB Code Generator Library
μ½λμμ± λΌμ΄λΈλ¬λ¦¬λ‘ λ°μ΄νΈμ½λλ₯Ό μ‘°μν΄μ Proxy κ°μ²΄λ₯Ό μμ±ν΄μ€λ€κ³ νλ€.
κΉνλΈλ₯Ό 보λ λ μ΄μ μ μ§ κ΄λ¦¬ λμ§ μκ³ , μ΅μ JDKμμλ μ λλ‘ μλ νμ§ μλλ€κ³ νλ€.
λ΄ ν΄λμ€λ₯Ό μμ λ°μ κ°μ§ νλ‘μ κ°μ²΄λ₯Ό λ§λ€μ΄μ μ£Όμ νλ€.
μ€νλ§ μ»¨ν μ΄λμλ κ°μ μ΄λ¦μΌλ‘ $EnhancerBySpringCGLIBλΌλ ν΄λμ€λ‘ λ§λ€μ΄μ§ κ°μ§ νλ‘μ κ°μ²΄κ° λ±λ‘λλ€.ac.getBeanμΌλ‘ μ‘°νν΄λ νλ‘μ κ°μ²΄κ° μ‘°νλλ€.
κ°μ§ νλ‘μ κ°μ²΄λ μ€μ μμ²μ΄ μ€λ©΄ κ·Έλ λ΄λΆμμ μ€μ λΉμ μμ²νλ μμ λ‘μ§μ΄ λ€μ΄μλ€.request μ€μ½νμ μ§μ§ λ©μλλ₯Ό νΈμΆνλ€.ν΄λΌμ΄μΈνΈ μ μ₯μμλ μλ³ΈμΈμ§ μλμ§ λͺ¨λ₯΄κ² λμνλ€.κ°μ²΄ μ‘°νλ₯Ό κΌ νμν μμ κΉμ§ μ§μ°μ²λ¦¬νλ€.
μ±κΈν€μ²λΌ λμνμ§λ§ μ€μ λ‘λ λ€λ₯΄κ² λμνλ―λ‘ μ£Όμν΄μ μ¬μ©ν νμκ° μλ€.
μ°Έμ‘°
κΉμν, μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ https://inf.run/ryWP
https://github.com/cglib/cglib
'Programming > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] νλ‘μ νΈ μμ± (0) | 2022.02.04 |
---|---|
[Spring] μΉ μ ν리μΌμ΄μ μ΄ν΄ (0) | 2022.02.03 |
[Spring] λΉ μλͺ μ£ΌκΈ° μ½λ°± (0) | 2022.01.18 |
[Spring] λ€μν μμ‘΄κ΄κ³ μ£Όμ λ°©λ² (0) | 2022.01.14 |
[Spring] μ±κΈν€ 컨ν μ΄λλ? (1) | 2022.01.13 |