전체 글 562

[Spring]다양한 의존관계 주입 방법 @Autowired

다양한 의존관계 주입 생성자 주입code 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.불변, 필수 의존관계에 사용.스프링 빈은 생성자가 1개일 경우에는, @Autowired를 생략해도 자동 주입된다.수정자(setter 주입)code※ 전역변수에 final을 삭제햇다.setter 필드를 이용해 생성자를 주입한다.선택, 변경 가능성이 있는 의존관계에 이용.(실제로는 거의 사용되지 않음)자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다.필드 주입code필드에 바로 의존성을 주입하는 방법이다.코드가 간결하여 이전에는 많이 썼으나, 외부에서 변경이 불가능해서 테스트하기 어렵다.따라서 비권장된다.(테스트 코드 등에서는 사용할만하다)일반 메서드 주입code일반 메서드를 통해서 주입 받을 수 있다...

🍃 Spring 2025.02.26

[SpringBoot]컴포넌트 탐색 위치 지정와 기본 스캔 대상. (+ 필터)

컴포넌트 탐색 위치 지정basePackages = "경로"  💡 basePackages = ("경로1", "경로2") 로 여러 개를 지정할 수 있다. 💡 지정하지 않으면, @ComponentScan이 붙은 패키지가 시작 위치가 된다.※ 이 방법, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 방법이 권장된다. 💡 중요!!!스프링부트로 생성하면 자동생성되는 @SpringBootApplication 에 @ComponentScan이 들어있기 때문에, 스프링부트로 프로젝트를 생성하면 @ComponentScan으로 클래스를 지정할 필요없이 바로 @Component만 사용하면 된다.  컴포넌트 스캔 기본 대상 @Component→ 빈으로 만들 클래스 객체로 인식.@Controller→ 스프링 MVC 컨트롤..

[Spring]컴포넌트 스캔과 의존관계 자동 주입

컴포넌트 스캔과의존관계 자동 주입 등록해야 할 스프린 빈이 수십, 수백개가 될 경우스프링은 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 이라는 기능을 제공한다.의존관계도 자동으로 주입하는  @Autowired  라는 기능도 제공한다.     AutoAppConfig 클래스 파일을 만든다. @Configuration  과  @ComponentScan (: 단어 그대로 @Component 들을 Scan 한다)애노테이션을 붙여준다.스프링 빈으로 등록할 클래스들에  @Component  애노테이션을 붙여준다.의존관계는   @Autowired   를 이용해 주입한다.이렇게 빈으로 등록된 자식객체와 @Autowired에 있는 부모객체가 같은 타입이므로 자동으로 의존관계가 연결된다. 💡 @Component("빈이름..

🍃 Spring 2025.02.25

[Spring]@Configuration과 바이트코드 조작

※ 이전 글2025.02.24 - [🍃 Spring/🍃 Spring Boot] - [SpringBoot]싱글톤 컨테이너2025.02.25 - [📑 개발 사전/✨ 디자인 패턴] - 싱글톤 방식의 주의점   2개의 서비스에서 → 리포지토리를 호출하고 있다. 호출 실행 테스트 코드 여러번 호출되었지만 딱 한번씩만 call이 찍힌 것이보이며 모두 동일한 리포지토리@3c9c0d96이다. @Configuration 이 AppConfig.class에 적혀있는데 여기서 @Bean이 적힌 객체들을 복사한다.출력을 보면 원본 appConfig과 다른 주소 class hello.core.AppConfig$$SpringCGLIB$$0 를 갖고 있는 게 보인다.이것이 스프링 컨테이너가 가진 싱글톤 빈 객체로, 스프링은 이..

🍃 Spring 2025.02.25

[JAVA]싱글톤 방식의 주의점

싱글톤 방식의 주의점  여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에, 싱글톤 객체는 상태를 유지stateful 하게 설계하면 안된다.무상태 stateless 로 설계해야한다.특정 클라이언트에 의존적 필드가 있으면 안된다.특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다.가급적 읽기만 가능해야 한다.필드 대신 자바에서 공유되지 않는 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다.스프링 빈의 필드에 공유 값을 설정하면 큰 장애가 발생할 수 있다.(실무에서는 이러한 문제가 발생하면 원인을 찾기 힘들다)  ※ 참조 : https://www.inflearn.com/roadmaps/373

[SpringBoot]싱글톤 컨테이너

💡 싱글톤이란?2025.02.24 - [📑 개발 사전/✨ 디자인 패턴] - Singleton 싱글톤 패턴  싱글톤 컨테이너  스프링 컨테이너는 싱글턴 패턴을 적용하지 않아도, 객체를 싱글톤으로 관리한다.스프링 컨테이너는 싱글톤 컨테이너 역할을 한다.→ 이렇게 싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트리 라고 한다.이 덕분에 싱글톤의 모든 단점(DIP, OCP, 코드의 복잡성, 테스트)을 해결한다. 💡 스프링의 기본 빈 등록 방식은 싱글톤이지만, 다른 방식도 지원한다.하지만 보통 99퍼 그대로 싱글톤 방식을 그대로 사용한다. ※ 참조 : https://www.inflearn.com/roadmaps/373

[JAVA]Singleton 싱글톤 패턴

웹 애플리케이션 & 싱글톤 패턴  스프링은 기업용 웹 어플리케이션으로 제일 많이 사용된다.동시에 많은 사용자가 요청을 보내면 메모리 낭비가 심하다.해결방안 : 해당 객체가 1개만 생성되고, 공유하도록 설계한다 → 싱글톤 패턴  싱글톤 패턴Singletone pattern: 클래스의 인스턴스가 딱 1개만 생성.  static 영역에 객체를 딱 1개만 생성.public으로 열어서 객체 인스턴스가 필요하면 이 static 메서드를 통해서만 조회하도록 허용.생성자를 private로 선언해서 외부에서 new 키워드를 사용한 객체 생성을 못하게 막는다.  💡 스프링 컨테이너에 객체가 Bean으로 등록될 때 자동으로 싱글톤 패턴으로 만들어 준다. ※ 참조 : https://www.inflearn.com/roadma..

[SpringBoot]BeanDefinition

스프링이 다양한 설정 형식을 지원2025.02.24 - [🍃 Spring/🍃 Spring Boot] - [SpringBoot]다양한 설정 지원-자바 코드, xml 할 수 있는 이유는 BeanDefinition이라는 추상화가 있기 때문이다.Spring Container → BeanDefinition ← Appconfig.class / appConfig.xml / appCoinfig.xxx설정 파일 형식을 읽는 AnnotationConfigApplicationContext와 genericXmlApplicationContext 클래스를 보면 빈을 읽는 BeanDefinitionReader가 전역변수로 있는 것을 볼 수 있다.위와 같이 이 메타 정보 BeanDefinition 인터페이스를 기반으로 스프링 빈..

[SpringBoot]다양한 설정 지원-자바 코드, xml

스프링 컨테이너는 다양한 형식의 설정 정보를 받아들일 수 있다.자바 코드 AppConfig.class, xml, Groovy  emd@애노테이션 기반 자바 코드 설정 사용xml 설정레거시 프로젝트 들에서 많이 볼 수 있다.장점 : 컴파일 없이 빈 설정 정보를 사용할 수 있다.appConfig.xml 만들기코드더보기 ※ ref는 reference의 줄임 말로 참조한다는 뜻이다. 그래서 ref에 들어간 이름들을 따로 으로 만들어 둔 것이다.테스트※ 참조 : https://www.inflearn.com/roadmaps/373

반응형