초기 구성은 application context를 통해 <bean>을 통해 개별적으로 등록하는 방식으로 해보고,
이후에는 <context:component-scan ...>과 annotation을 사용함
최종적으로 spring boot를 하면 application context도 필요없음
/resources/applicationcontext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 아래의 정보를 보고 IOC container가 생성 시점에 객체를 생성(IoC Bean factory에서)
Spring 2 시절에 사용하던 것
<bean id="clubStore" class="spring.study.repository.mapstore.ClubMapStore" />
<bean id="clubService" class="spring.study.service.servicelogic.ClubServiceLogic" >
<constructor-arg ref="clubStore" />
</bean>
-->
<!-- 위 방식처럼 일일이 등록하지 않고 특정 패키지 부터 찾아라
이를 위해서는 bean으로 사용될 class에 annotation을 지정해야함
이대로 하면 class 이름이 나타남(이름 지정) -->
<context:component-scan base-package="spring.study"/>
</beans>
<!--이전에 사용하던 DI 주입을 위한 XML 파일 등록 방식
이전 방식으로 참조용으로 한번 해봄 => 실제로는 이후에 Spring boot를 활용해서 주입할 것임
중간에 context:component-scan 를 활용한 등록 방식도 해봄
-->
DB와 연계해서 데이터를 읽고 쓸 객체를 생성(현재는 Map에 저장함 -> 나중에 DB로 변경)
ClubMapStore와 MemberMapStore를 구성(LinkedHashMap에 데이터 저장)
기본적인 DB에 접속해서 CRUD를 구현하는 과정으로 좀더 세부적인 내용은 이후 service logic에서 처리함
ClubMapStore 내용을 갖고 ClubServiceLogic 에서 내용을 구현함
@Repository("clubStore")
public class ClubMapStore implements ClubStore {
private Map<String, Club> clubMap;
public ClubMapStore(){
this.clubMap = new LinkedHashMap<>();
}
@Override
public String create(Club club) {
clubMap.put(club.getId(), club);
return club.getId();
}
@Override
public List<Club> findByName(String clubName) {
return clubMap.values()
.stream()
.filter(club -> club.getName().equals(clubName))
.collect(Collectors.toList());
}
@Override
public Optional<Club> findById(String clubId) {
return Optional.ofNullable(clubMap.get(clubId));
}
@Override
public List<Club> findByNameContaining(String clubName) {
return clubMap.values()
.stream()
.filter(club -> club.getName().contains(clubName))
.collect(Collectors.toList());
}
@Override
public List<Club> findAll() {
return new ArrayList<Club>(clubMap.values());
}
@Override
public void update(Club club) {
clubMap.put(club.getId(), club);
}
@Override
public void delete(String clubId) {
clubMap.remove(clubId);
}
@Override
public boolean exists(String clubId) {
// return clubMap.containsKey(clubId);
return Optional.ofNullable(clubMap.get(clubId)).isPresent();
}
}
@Repository
public class MemberMapStore implements MemberStore {
private final Map<String, Member> memberMap;
public MemberMapStore(){
this.memberMap = new LinkedHashMap<>();
}
@Override
public String create(Member member) {
memberMap.put(member.getId(), member);
return member.getId();
}
@Override
public Optional<Member> findById(String memberId) {
return Optional.ofNullable(memberMap.get(memberId));
}
@Override
public Optional<Member> findByEmail(String memberEmail) {
return memberMap.values()
.stream()
.filter(m -> m.getEmail().equals(memberEmail))
.findAny();
}
@Override
public List<Member> findByName(String memberName) {
return memberMap.values()
.stream()
.filter(member -> member.getName().equals(memberName))
.collect(Collectors.toList());
}
@Override
public List<Member> findByNameContaining(String memberName) {
return memberMap.values()
.stream()
.filter(member -> member.getName().contains(memberName))
.collect(Collectors.toList());
}
@Override
public List<Member> findAll() {
return new ArrayList<>(memberMap.values());
}
@Override
public void update(Member member) {
memberMap.put(member.getId(), member);
}
@Override
public void delete(String memberId) {
memberMap.remove(memberId);
}
@Override
public boolean exists(String memberId) {
return memberMap.containsKey(memberId);
}
}
membership은 나중에 구현
'Spring > spring_old' 카테고리의 다른 글
07. Project를 spring-boot로 전환 (0) | 2023.01.20 |
---|---|
06. service logic 구현 (0) | 2023.01.20 |
04. interface(repository, service)-02 (0) | 2023.01.19 |
04. Data class 등 관련 코딩-01 (0) | 2023.01.19 |
03. Project 시작 구성-interface 등 구성 (0) | 2023.01.19 |