스프링 학습 중
- -
아직 정리하지 않은 글 입니다.
스프링
OOP 구조를 뒷받침하고 구조를 설계하는 사상.
다른 프레임워크들과의 통합을 지원.
ApplicationContex
이 녀석이 필요한 객체들을 생성, 필요한 객체들을 주힙하는 역할을 해주는 구조.
스프링에서는 ApplicationContext가 관리하는 객체를 Bean 이라는 용어로 부름.
빈과 빈 사이의 의존관계
XML, 어노테이션, JAVA로 설정 가능.
AOP
반복적인 코드의 제거
보안, 로그, 트랜잭션 → 횡단관심사 라고 함.
횡단관심사를 모듈로 분리하는 프로그래밍의 패러다임
1) 핵심 비즈니스 로직에만 집중해서 코드를 개발
2) 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화
3) 원하는 관심사의 유지보수가 수월한 코드를 구성
트랜잭션지원
의존성 주입 테스트
1) 생성자를 이용한 주입
2) setter 메서드를 이용한 주입
XML, 어노테이션을 이용해서 처리.
의존성 주입 방법
*1) 태그 방식
2) 어노테이션 방식
*3) Setter 방식
*4) 생성자 방식
- 다른 사람이 작성한 클래스 파일은 1,3,4번과 같은 방식을 사용해야함.
스프링구조
src/main/java → 작성되는 코드의 경로
src/main/resources → 실행할 때 참고하는 기본 경로 (주로 설정 파일들을 넣는다)
src/test/java → 테스트 코드를 넣는 경로
src/test/resources → 테스트 관련 설정 파일 보관 경로
servlet-context.xml → 웹과 관련된 스프링 설정파일
root-context.xml → 스프링 설정파일
web.xml → Tomcat의 web.xml 파일
pom.xml → Maven이 사용하는 pom.xml
@Autowired
- 빈과 빈의 의존성을 자동으로 만족시키게 하는 수단
- 스프링 전용, 타입에 맞춰서 연결 (스프링 외에서는 사용을 못 한다.)
@Inject
- 의존관계를 자동으로 연결해주는 어노테이션
- 위의 Autowired 랑 비슷하지만 다른 어노테이션
- 자바에서 지원, 타입에 맞춰서 연결
- 자바 기존의 어노테이션
@Resource
- 자바에서 지원, 이름으로 연결
- 자바 기존의 어노테이션
@ComponentScan
- java설정을 했을 때 root-context.xml을 대신할 때.
- root-context.xml 을 보면 xml을 읽어오기 위해서
<context:component-scan base-package="org.zerock.sample"></context:component-scan>을 이용.
- 만약에 데이터연동을 xml로 한다면 따로 클래스를 만들어서 할 필요가 없고
- java 로 설정을 하는 경우 - 클래스를 만들어서 데이터연동을 하고 myBatis 설정도 같은 클래스에서 한다.
- xml 로 설정을 하는 경우 - root-context.xml 에서 설정을 한다.
*@Component 와 @Autowired 상관관계.
@Component
- 스프링에게 해당하는 클래스가 스프링에서 관리해야하는 대상임을 표시하는..
- @Component("이름") 마크를 달아놓으면, xml의 빈으로 등록해달라는 표시 id는 기본적으로 클래스면의 첫글자를 소문자로...
- 예를 들어서 Bird 라는 인터페이스를 상속하는 치킨과 팽귄이라는 클래스가 있다고 하자.
- 치킨과 팽귄 클래스를 연결해야하니깐 @Component로 빈에 등록을 해주는 것.
1 2 3 4 5 6 7 8 9 | public class Bird{} @Component public class Chicken implements Bird{} @Component public class Penguin implements Bird{} | cs |
1 2 3 4 5 6 7 8 9 10 11 | @Autowired private Chicken penguin; //Chicken 타입으로 연결됩니다. @Inject private Penguin chicken; //Penguin 타입으로 연결됩니다. @Resource private Chicken penguin; //penguin 타입으로 연결됩니다만, Chicken 클래스를 자료형으로 두었기에 캐스팅이 되지 않아 에러가 납니다 @Resource private Bird penguin; //penguin 타입으로 연결되어 호출해보면 penguin 클래스의 값을 호출하는 것을 볼 수 있습니다. | cs |
1 2 3 | @Autowired @Qualifier("chicken") pirvate Brid penguin; | cs |
- 해당 클래스의 인스턴스를 이용해서 설정 파일을 대신 하는 역할.
@Log4j [lombok 어노테이션]
- lombok을 이용해서 로그를 기록하는 Logger 를 변수를 생성.
- 별도의 Logger객체의 선언이 필요 없다.
- Log4j와 해당 설정이 완료되는 상태라서 별도의 처리 없이도 사용이 가능.
* @Log4j 는 Log4j가 없다면 @Log 를 이용
@Data [lombok 어노테이션]
- Lombok을 이용한 것
- setter 생성하는 기능과 생성자, toString() 등을 자동으로 생성하도록 하는 어노테이션
- 세부적인 설정을 할 필요가 없다면 Data로
@Setter // @getter [lombok 어노테이션]
- lombok 에서 만들어주는... setter 를 해주는 어노테이션
- up to JDK7:@Setter(onParam=@__({@AnnotationsGoHere}))}
- from
JDK8:@Setter(onParam_={@AnnotationsGohere})}
@AllArgsConstructor
- 인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성
@NonNull & @RequiredArgsConstructor
- 여러 개의 인스턴스 변수들 중에서 특정한 변수에 대해서만 생성자를 작성할 때.
- @RequiredArgsConstructor는 @NonNull 이나 final이 붙은 인스턴스 변수에 대한 생성자를 만듦.
@ContextConfiguration [테스트 관련 어노테이션, 제일 중요]
- 속성값인 문자열을 설정하는 (즉 root-context경로를 설정해서 그 안의 스프링의 빈을 등록하는 것)
- classpath & file 을 이용할 수 있다.
- XML 뿐만 아니라 JAVA 설정으로도 가능.
- @ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
- 속성으로는 locations 를 이용
@RunWith [Junit 어노테이션, 테스트 관련 어노테이션]
- 테스트 코드가 스프링을 실행하는 역할을 할 것
- SPringJUnit4ClassRunner 클래스가 대상.
@Test [JUnit 어노테이션, 테스트 관련 어노테이션]
- JUnit 테스트 대상을 표시하는 어노테이션
- 해당 메서드를 선택하고 JUnit Test 기능을 실행.
- @Test는 junit에서 해당 메서드가 jUnit 상에서 단위 테스트의 대상
- Junit 메서드
객체 A는 (restaurant) 즉, 주체가 되는 객체
assertArrayEquals(a,b) : 배열 a와b가 일치함을 확인
assertEquals(a,b) : 객체 a와b의 값이 같은지 확인
assertSame(a,b) : 객체 a와b가 같은 객체임을 확인
assertTrue(a) : a가 참인지 확인
assertNotNull(a) : a객체가 null이 아님을 확인 (null이 아니면 테스트가 성공!)
@ModelAttribute
강제로 전달받은 파라미터를 Model에 담아서 전달하는 어노테이션
1 2 3 4 5 6 7 8 | @GetMapping("/ex04") public String ex04(SampleDTO dto, @ModelAttribute("page") int page) { log.info("SampleDTO 입니다. >>>>"+dto); log.info("페이지 입니다. >>>>"+page); return "/sample/ex04"; } | cs |
=== pom.xml ===
------ maven ------
Mybatis-spring
- 마이바티스와 스프링을 연동해주는 모듈
Spring-jdbc/Spring-tx
- 스프링에서 데이터베이스 처리와 트랜잭션 처리(Mybatis 에서 안하면 에러생김)
Tip)
dependency 를 추가할 때 <version>에서 아래와 같이 쓴다면 이것은 스프링프레임워크의 버전에 맞춰서 치환된다.
<version>${spring-framework.version}</version>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
=== root-context.xml ===
------ mybatis ------
MyBatis 에서 가장 핵심적인 객체는 SQLSession 이라는 존재와 SQLSessionFactory 이다.
SQLSessionFactory : SQLSession 을 만들어내는 존재
SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받는 구조로 작성한다.
스프링에서 SqlSessionFactory를 등록하는 작업은 SqlSessionFactoryBean을 이용한다.
---- 에러 ----
log4 Junit에러
'개발자의 공부방 > 스프링' 카테고리의 다른 글
[IntelliJ] 인텔리제이 스프링 MVC 만들 때 pom.xml (0) | 2019.08.27 |
---|---|
logback 사용 시 log4jdbc 로그 찍기 (0) | 2019.06.07 |
스프링 기초] jUnit 이란? (0) | 2019.05.22 |
스프링 기초] DI (Dependency Injection)란? (0) | 2019.05.21 |
스프링 기초] 컨테이너와 IoC (Inversion of Control, 제어의 역전) 란? (1) | 2019.05.21 |
소중한 공감 감사합니다