라이브러리가 제대로 설치가 되어 있어야 java 개발 시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해 준다.
Lombok라이브러리가 들어가 있어야 맞춰서 동작이 된다.
동작하지 않으면 지웠다가 다시 설치 하면 된다.
Maven Dependecies에 lombok라이브러리를 설치 하려면 pom.xml에 추가해야 한다.
Maven에 들어가서 lombok 검색 후 버전 찾아서 Sinppets 복사해서 붙여넣기.
교재 p.54 참고
<scope>
이 라이브러리를 언제 동작 할 것인지 정의를 해놓는 태그.
지워도 되긴 하지만 동작이 안 될 수도 있으므로 지우지 말고 주석처리를 해놓는다.
설정파일(pom.xml
)을 바꾼 경우 프로젝트에서 우클릭 후 Maven-Update Project를 한번 해 주는게 좋다.
lombok라이브러리를 추가 하고 BoardVO 클래스를 만들어 변수를 선언했을 때,
getter/setter와 toString() 메서드를 만들지 않아도 BoardController에서 BoardVO를 import해서 생성하면 사용할 수 있다.
package org.zerock.board.vo;
import lombok.Data;
// Data를 저장하고 꺼낼 때 사용
@Data
public class BoardVO {
// 여기서 getter/setter, toString()을 만들지 않았지만 lombok 라이브러리가 있어서 저절로 만들어져 있다.
private long no;
private String title;
}
@RequestMapping("/board/list.do")
public String list() {
log.info("게시판리스트i");
log.warning("게시판리스트w");
BoardVO vo = new BoardVO();
// BoardVO 클래스에서 getter/setter, toString 메서드를 만들지 않았지만 lombok라이브러리를 추가했기 때문에 사용이 가능하다.
vo.setNo(10);
log.info(vo.toString());
return "board/list";
}
결과
test 할 때 클래스 위치가 중요하다. 실제로 코드를 동작시키기 위해서는 src/main/java
안에 클래스를 생성해야 하지만 테스트 할 때는 src/test/java
에 생성해야 한다. 만약에 test에 생성하면 코드가 제대로 동작하지 않을 수 있으므로 위치를 잘 보고 클래스를 생성하자.
어노테이션의 종류
package org.zerock.board.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.zerock.board.dao.BoardDAOImpl;
import lombok.Data;
import lombok.Setter;
/*
* Spring 자동생성 어노테이션 - root-context.xml에 아래처럼 설정이 되어 있어야 어노테이션 사용 가능.
* <annotation-driven /> <context:component-scan base-package="org.zerock" />
* @Controller, @Component, @Service, @Repository(DAO에 해당-컴퓨터를 꺼도 DB에 저장되는 부분)
* @RestController(Ajax같이 원본 데이터를 그대로 보낼 때 사용하는 Controller), @Advice(예외처리)
*/
@Service
@Data
public class BoardServiceImpl {
@Setter(onMethod_ = @Autowired)
private BoardDAOImpl dao;
}
라이브러리 등록시에 pom.xml에서 de
Oracle 11g xe 사용
Grant를 사용해 권한을 줄 때는 sys계정으로 해야 한다.
Tomcat 기본 포트가 8080이고 Oracle 11g도 8080포트를 사용해서 충돌 할 수 있으므로 실습 때는 Tomcat 서버를 80포트로 변경해서 사용.
라이브러리 등록시에 라이브러리 파일을 찾아서 복붙 해도 되지만
pom.xml에 등록하면 된다.
<!-- DB 관련 라이브러리 -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.4</version>
</dependency>
p.38 Lombok 라이브러리 설치
p.54 pom.xml에 라이브러리 추가
1.8.12를 다운 받았는데 왜 pom.xml은 1.18.0을..?
p.48 의존성
어노테이션
Spring 자동생성 어노테이션
@Controller, @Component, @Service, @Repository(DAO에 해당-컴퓨터를 꺼도 DB에 저장되는 부분),@RestController(Ajax같이 원본 데이터를 그대로 보낼 때 사용하는 Controller), @Advice(예외처리)
github에 오늘 실습한 프로젝트 올려놓고 다운받아서 집에서 교재랑 복습하기~
try-with-resources 이게뭐야 복습하자
Connection pool?
<오늘 배운 스프링/lombok 중 의존성 주입 관련 정리>
[조립]
(의존성 이해하기)
A 객체에서 B 객체를 변수로 사용한다
= A객체는 B객체를 필요로 한다
= A객체는 B객체에 의존한다(의존성)
-> A객체를 사용하려면 B객체를 생성해서 넣어줘야 함
(Service에서 DAO객체를 변수로 만들고 SetDao 해서 사용한 게 주된 예시)
스프링에서는 이걸 의존성 주입(DI)라고 함 - dependency injection
방법이 여러 가지 있는데,
1) @Inject를 붙인다 - JAVA에서 제공한다는데 쓰는 걸 본 적이 없음. 몰라도 될 듯
2) @Autowired를 붙인다. - 스프링에서의 가장 기본적인 DI 방법
->필요한 객체를 Bean으로 등록된 객체 중 찾아서 알아서 넣어 줍니다
(등록은 위에 [등록] 참고)
(예시)-----------------
public class A {
private B b; // A는 B객체를 변수로 사용함
@Autowired //A객체에는 B객체가 필요하다고 스프링에게 알림
public void setB(B b) { // A객체 등록 시 Bean에서 B객체를 찾아서 자동으로 b에 set해줌
this.b = b;
}
3) @Setter (onMethod_ = { @Autowired })
여기서 lombok 기능 중 오늘 배운 것들 정리
(예시)-----------------
public class A {
@Setter (onMethod_ = { @Autowired })
private B b; // 위의 예시처럼 @Autowired가 붙은 Setter를 자동으로 생성해 줌 -> 위와 동일하게 동작