μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
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 |
- Git
- κ°μ¬μ€
- Python
- Spring
- ν΄λ¦°μ½λ
- MySQL
- H2 μ€μΉ
- κΈ°μ΄100μ
- ν°μ€ν 리μ±λ¦°μ§
- go
- springboot
- Postman
- μ€νλ§
- GitHub
- ν΄λ¦° μ½λ
- Codeup
- Gradle
- Spring Boot
- spring security
- thymeleaf
- νμ΄μ¬
- JPA
- java
- μκ³ λ¦¬μ¦
- 둬볡
- mariadb
- μ€λΈμ
- Vue.js
- μ½λμ
- golang
- 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
μ€νλ§ ν΅μ¬ μ리 - κΈ°λ³ΈνΈ - μΈνλ° | κ°μ
μ€νλ§ μ λ¬Έμκ° μμ λ₯Ό λ§λ€μ΄κ°λ©΄μ μ€νλ§μ ν΅μ¬ μ리λ₯Ό μ΄ν΄νκ³ , μ€νλ§ κΈ°λ³ΈκΈ°λ₯Ό νμ€ν λ€μ§ μ μμ΅λλ€., μ€νλ§ ν΅μ¬ μ리λ₯Ό μ΄ν΄νκ³ , μ±μ₯νλ λ°±μλ κ°λ°μκ° λμ΄λ³΄μΈμ! π’
www.inflearn.com
https://github.com/cglib/cglib
GitHub - cglib/cglib: cglib - Byte Code Generation Library is high level API to generate and transform Java byte code. It is use
cglib - Byte Code Generation Library is high level API to generate and transform Java byte code. It is used by AOP, testing, data access frameworks to generate dynamic proxy objects and intercept f...
github.com
'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 |