rhakdnj / kopring

0 stars 0 forks source link

@Configuration + @Bean #1

Open rhakdnj opened 8 months ago

rhakdnj commented 8 months ago
package org.example.kotlinspring.study

import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class Config {
  @Bean
  fun name(): String {
    return "Kotlin"
  }

  @Bean
  fun age(): Int {
    return 20
  }

  @Bean
  fun person(): Person {
    return Person(name(), age())
  }

  @Bean(name = ["customAddress"])
  fun address(): Address {
    return Address("firstLine", "city")
  }
}

fun main() {
  val context = AnnotationConfigApplicationContext(Config::class.java)

  context.getBean("name").let(::println)
  context.getBean("age").let(::println)
  context.getBean("person").let(::println)
  context.getBean("customAddress").let(::println)
}

data class Person(val name: String, val age: Int)
data class Address(val firstLine: String, val city: String)

링크

rhakdnj commented 8 months ago

@Bean(name= ["${beanName}"]) : beanName 으로 등록됨

rhakdnj commented 8 months ago

Bean Name 말고도 Class로도 가져올 수 있음

rhakdnj commented 8 months ago

Parameter는 생성자 주입이 되어 들어간다

rhakdnj commented 8 months ago

Address 인스턴스가 여러개가 있다면 생성자의 파라미터 명(bean Name)을 기준으로 들어간다

rhakdnj commented 8 months ago

Spring Container

Spring Bean의 라이프 사이클을 관리한다

Spring Context

== Spring Container

IOC Container

== Spring Container

Application Context

rhakdnj commented 8 months ago

여러 개의 빈을 사용할 수 있으려면 어떻게 해야할까요?

Spring이 어떤 것을 우선순위로 정하도록 해야 할까

rhakdnj commented 8 months ago

Java Bean

  1. public no-arg 생성자
  2. getter, setter
  3. implements Serializable
class JavaBean implements Serializable {
  public JavaBean() {
  }

  @getter @setter
  private String text;

  @getter @setter
  private int number;
}
rhakdnj commented 8 months ago

Bean 전체 출력을 할 수 있다

rhakdnj commented 8 months ago

@ComponentScan : 해당 패키지 + 해당 하위 패키지 기준으로 Component를 찾는다

rhakdnj commented 8 months ago

Spring Security 와 같은 thrid library를 사용한다면 Bean을인스턴스화 해야한다.