반응형으로 아래 화면처럼 요청이 들어온 걸로
https://velog.io/@juyeon/요구사항-정의서-작성하는-법
https://blog.naver.com/mogni/220670564871
@Autowired
private SqlSession sqlSession;
DAO 패키지에 상속받을 부모클래스 생성(AbstractDAO.java)
접근제어자 때문에 에러뜨니까 private -> (default)
protected가 상속받는 범위까지지만 같은 패키지에 존재하기 때문에 default도 되는거같다
@Autowired
Util util;
@Resource, @Inject, @Autowired 사용 (자동 의존성 주입)
javax annotation api도 필요하다
https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api/1.3.2
pom.xml
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
@Resource(name="galleryService")
private GalleryService galleryService;
이름을 꼭 맞춰줘야 한다.
일치하는 이름이 있으면 ok
@Autowired
는 타입을 먼저 본다
GalleryService.java의 이름을 GalleryServiceImpl로 바꾼다 (implement라는 뜻)
이 이름만 맞으면 된다고 한다.
GalleryService라는 인터페이스를 만들었다. (그래서 기존 GalleryService 이름 변경함)
- 인터페이스 사용
상속 목적. 강제성을 위해..
이렇게 길어졌다.
GalleryService.java 인터페이스
public interface GalleryService {
public int galleryInsert(GalleryDTO dto); //추상메서드
public List<GalleryDTO> galleryList();
public GalleryDTO detail(String no);
}
GalleryController.java
@Controller
public class GalleryController {
//이래도 되는 이유는 부모 형태로 말해도 자식 형태가 들어갈 수 있으니까(다형성?)
@Resource(name="galleryService") // 실제로 주입된 객체는 이름이 "galleryService"인 GalleryServiceImpl
private GalleryService galleryService; // 여기서 말하는 GalleryService는 GalleryService 인터페이스
// 여기에 메서드들 있다...
}
GalleryServiceImpl.java
인터페이스 추상메서드들 다 오버라이딩한다.
@Override
- 인터페이스 만든 목적
: 메서드 시그니처가 다 똑같아야 관리가 편하다
- 전자정부에 이런 모양이 많다
우리 책(코드로 배우는 스프링 웹 프로젝트)은 jpa로 만들어져서 우리랑 좀 다르다
매력적 치명적 딤섬🥟