❤ 김춘장이의 위키백과 - 나만의 공부 기록 Tistory ❤
스프링프레임워크 시작 시 진행하는 단계
- 스프링 애플리케이션 콘텍스트 초기화 : ApplicationContext
- Bean 로드
클래스패스(ClassPath)에서 Bean정의를 찾아 로드한다
이 과정에서 XM파일의 어노테이션, JAVA설정 클래스 등에서 Bean정의를 읽어온다 - Bean 인스턴스 생성
컨테이너는 Bean정의에 따라 인스턴스를 생성한다, 이 단계에서 DI수행함 - 의존성 주입
스프링은 Bean들 사이의 의존성을 해결하고 주입한다
생성자주입/Setter주입/Filed주입 - Bean 초기화
Bean초기화 메서드가 호출되며 모든 의존성이 주입된 후에 진행함 - Post-Processor 실행
Bean 생성과 초기화 이후 스프링은 BeanPostProcessors를 실행한다
Bean의 추가적인 처리를 위해 사용됨 - 이벤트 발생
콘텍스트가 완전히 초기화되고 사용 가능 상태가 됨을 알리기 위해 이벤트 발생 - 애플리케이션 사용 준비 완료 : 요청, 응답 모두 가능 상태
- 종료 : 애플리케이션 종료 시 스프링 콘텍스트는 close메서드를 호출
Bean의 소멸 생명 주기를 관리함
Bean
스프링이 시작하면 Bean 생성해서 컨테이너에 집어넣어 놓는다
IoC컨테이너에 위해 인스턴스화하며 관리, 생성된다
컨테이너는 객체를 관리하며 이것을 Bean 사이클 관리
라고 한다
컨테이너에서 객체를 만들 때는 기본적으로 싱글 톤
패턴으로 만든다
객체를 생성할 때 한 개씩 만 만든다라고 생각하면 된다
개발자는 객체가 필요할 때 컨테이너로부터 달라고 한다
달라고 하는 것에 전문적인 용어는 주입 Inject
받는다라고 한다
객체가 필요할 경우 > 컨테이너에게 달라고 한다
싱글톤 패턴으로 만드는 이유 = 자원을 생성하여 공유하려고 , 자원의 낭비를 하지 않도록
의존성 주입 주의점
- 주입 시 타입으로 주입을 받는다
- 인터페이스 한 개에 클래스 한 개만 구현받을 수 있다
스프링의 개념은 컨테이너를 관리하는 것 Repository의 개념은 DAO정도로 이해하면 된다
@Annotation
@Inject 컨테이너로 부터 주소를 주입 받는다
@Repository 사용하여 컨테이너에 올려준다 (의미적으로 DAO단 객체인걸 알아야한다)
@Controller 를 사용해도 컨테이너에 올려 줄 수 있다 차이점은 어노테이션을 다르게해서
컨테이너에 등록하여 각각의 역할을 지정하는것 이다
@Autowired
가장 많이 사용되는 의존성 주입 어노테이션
생성자, 세터 메서드, 필드에 적용할 수 있다
타입에 따라 자동으로 의존성을 주입한다
@Qualifier
@Autowired와 함께 사용되며, 주입할 빈을 더 구체적으로 지정할 때 사용한다.
동일한 타입의 여러 빈이 존재할 때, 어떤 빈을 주입할지 명시적으로 지정하는 역할
@Resource
Java 표준 어노테이션으로, 이름(name)을 기반으로 의존성을 주입한다.
필드 또는 세터 메서드에 적용할 수 있다
@Inject
@Autowired와 유사하게 작동하지만, 스프링 외의 다른 컨테이너에서도 사용될 수 있다.
@Value
프로퍼티 파일이나 환경 변수 등에서 값을 주입받을 때 사용한다.
리터럴 값, 시스템 프로퍼티, 표현식을 통한 값 주입에 사용됨.
@Lookup
추상 메서드에 적용, 매번 새로운 빈 인스턴스를 가져올 때 사용함.
주로 프로토타입 스코프의 빈을 싱글톤 빈에서 사용할 때 활용됨.
@PersistenceContext
JPA에서 EntityManager 주입에 사용되는 어노테이션.
JPA 사용 시, EntityManager의 의존성 주입에 활용됨.
@PersistenceUnit
JPA에서 EntityManagerFactory 주입에 사용되는 어노테이션
EntityManagerFactory의 의존성 주입에 활용됨
Spring 주요 실수 포인트
1. 오타
2. URL 주소 매핑 잘못
3. @Inject 누락 인터페이스
4. 한개 당 클래스 한개만 구현 받을 수 있는데 두개이상 구현해서
Component
개발자가 만든 클래스를 Bean으로 등록하는 데 사용되는 어노테이션이다
@Component라는 표시를 클래스에 붙이면 스프링이 자동으로 그 클래스를 Bean으로 사용할 수 있도록 해준다
MVC2
M : Model (DB)
데이터와 비즈니스 로직을 처리함
V : View (클라이언트)
사용자 인터페이스 UI담당
C : Controller (컨트롤러)
사용자의 입력을 처리하고 Model과 View사이의 상호작용 관리
특징
중앙 처리 메커니즘을 통해 요청 관리가 용이하다
이로 인해 애플리케이션의 흐름을 쉽게 관리가능 하다
View와 Model의 분리로 유지보수가 간편해진다
재사용성과 확장에 유연성이 있다
단점으론 초기 설정과 구성이 복잡할 수 있다
Mybatis
자바 객체와 데이터베이스 간에 매핑을 제공하는 프레임워크이다
JDBC를 사용하여 데이터베이스 연산을 수행하지만 JDBC의 복잡함과 코드 반복을 줄여준다
주요 단어
Mapper, DriverManagerDataSource, SqlSessionFactoryBean, SqlSessionTemplate
DriverManagerDataSource : 데이터베이스의 드라이버정보 밑 커넥션 정보
SqlSessionFactoryBean : 쿼리공장, mapper.xml 파일을 통해 쿼리문을 작성해 놓음
SqlSessionTemplate : 데이터베이스에 처리를 실질적으로 매핑해서 처리하는 역할
id=“dataSource” ID는 변수 명
SqlSessionFactoryBean : 쿼리문
mapperLocations : mapper의 위치, sql의 쿼리문의 공장
value="classpath:/mapper/*Mapper.xml --> 폴더를 지정
비슷한 프레임워크로는
Hibernate , JPA가 있다
JPA는 더 간편하게 사용할 수 있다.
국내에는 마이바티스, 전 세계적으론 JPA가 많이 사용한다
mybartis 적용 절차
- pom.xml 에서 필요한 드라이버 설정하기
<!-- 추가할 라이브러리를 설정합니다 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<!-- MyBatis 연동 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
- 의존성 설정
root-context.xml 에 진행
bean : datasource, sqlsessionFactory, sqlsessionmTmplate
<!-- 추가할 라이브러리를 설정합니다 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
<!-- MyBatis 연동 라이브러리 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
💡 파일별 역할 개념 정리 💡
클라이언트에게 html파일을 랜더링 하기 위한 파일 👉 servlet-context,
스프링이 구동될 때 컨트롤러나 객체를 인식하기 위한 파일 👉 root-context
'🌱 𝐅𝐫𝐚𝐦𝐞𝐰𝐨𝐫𝐤 > ⠀⠀⠀⠀ Sᴘʀɪɴɢ' 카테고리의 다른 글
20231228🌱 게시판 만들기 (0) | 2024.01.01 |
---|---|
20231227🌱 즐겨봐요 봄날의 스프링 (0) | 2023.12.28 |
20231226🌱 다시 한번 시작해요 스프링 (0) | 2023.12.27 |
20231221🌱 멘붕의 시작, 클라이언트에 대해 (0) | 2023.12.27 |
20231220🌱 SringFramework을 시작하다 (1) | 2023.12.27 |