package kr.or.kosa.security;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import kr.or.kosa.dao.MemberDao;
import kr.or.kosa.dto.MemberDto;
import kr.or.kosa.security.domain.CustomUser;
import lombok.Setter;
public class CustomUserDetailService implements UserDetailsService{
@Setter(onMethod_ = {@Autowired})
private MemberDao memberDao;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
System.out.println("Load User By UserName : " + username);
System.out.println("멤버dao : " + memberDao);
//userName means userid
MemberDto dto = memberDao.read(username);
System.out.println("queried by memberdao : " + dto);
return dto == null ? null : new CustomUser(dto);
}
}
memberDao의존성 주입이 안 돼서 null이 나옴
따라서 MemberDto dto = memberDao.read(username)은 nullPointerException 발생...
교수님은 수업에서 service단에서 sqlSession을 autowired로 의존성을 주입하고,
그 후 아래 서비스 구현 함수에서 dao = sqlsession.getMapper(EmpDao.class)와 같이 동기화를 하셨다
책에서의 실습은 위와 같이 하지 않고 바로 dao를 autowired를 하는데
이를 위한 설정을 해놓지 않아서 null이 뜬듯...?
mapper 연결을 어떻게 하느냐의 차이인 것 같다
<mybatis-spring:scan
base-package="kr.or.kosa.dao" />
root-context.xml에 mapper가 구현하는 인터페이스가 들어있는 패키지를
위와 같이 작성했더니 올바르게 dao 의존성이 주입되었다.
기존에 내가 써온 방식은 저렇게 하지 않고
<!-- MyBatis 설정 START -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="driverManagerDataSource"></property>
<property name="mapperLocations" value="classpath*:kosa/mapper/*xml" />
</bean>
여기서 sqlSession이 읽어올 mapperLocation을 지정해준 거였고... ? ? ?
허 헷갈린다 ㅜ
--책보고왓음
mapper 설정 방법의 차이인듯
<mybatis-pspring:scan> 태그의 base-package속성은 지정된 패키지의 모든 마이바티스 관련 어노테이션을 찾아서 처리한다. Mapper를 설정하는 작업은 각각의 XML이나 Mapper 인터페이스를 설정할 수도 있지만 매번 너무 번잡하기 때문에 패키지를 인식하는 방법으로 작성하는 것이 편리하다.
...ㅠㅠ헷갈려 ~ 지금까지 저거 없이도 sqlSession에서 매퍼 잘만 불러왔는데
저 태그를 쓰면 sqlSession없이 매퍼를 쓸 수 있다는 건가??
[MyBatis] MapperScan를 통한 Mapper 주입 방식
MyBatis에서 제공하는 mybatis-spring 연동모듈을 이용하면, @Mapper(애너테이션)을 이용하여 Mapper Interface를 스프링 빈으로 주입받아 DB에 접근하는 방법
linked2ev.github.io
https://juntcom.tistory.com/44
[Spring] 스프링 mapper 등록하기
mapper 등록하기 xml 설정 매퍼는 다음처럼 XML설정파일에 MapperFactoryBean을 두는 것으로 스프링에 등록된다. MapperFactoryBean은 SqlSessionFactory 나 SqlSessionTemplate가 필요하다. sqlSessionFactory 와 sqlSessionTemplat
juntcom.tistory.com
[Mybatis]SqlSessionTemplate/MapperInterface(3.0이전 / 3.0이후) 구현방식 차이
SqlSessionTemplate / MapperInterface MyBatis에 대한 간단한 설명 : https://u-it.tistory.com/36 Mapper xml파일 SqlSessionTemplate, MapperInterface 공통 Mapper.xml파일을 생성합니다. Mybatis xml파일이라는것을 doc타입 선언을 해
u-it.tistory.com
[Mybatis]란? / SqlSessionTemplate, MapperInterface 개념/빈 등록 설정
[MyBatis]란 무엇인가 에 대해서 또 SqlSessionTemplate/MapperInterface 두가지 방식에 따른 전체적인 구조 차이와 Mapper.xml 속성 차이에 대해 정리합니다. [MyBatis]란? 앞서 사용해 보았던 Jdbc-Template도 상당히
u-it.tistory.com
SqlSessionTemplate와 MapperInterface 기능을 수행하기위해 빈을 등록해주는 코드입니다.
두가지 방식중 사용할 방식만 선택하여 선언 및 주입시키면 되지만, 두가지 모두 주입시켜도 무관합니다.
둘다 같이 써도 된대 ㄱ- 걍 앞으로 둘다 박아놔야겟다