読者です 読者をやめる 読者になる 読者になる

@Component(instance=InstanceType.SESSION)でひとはまり。

それとは別にはまったのが、これ。

public class LogonServiceImpl implements LogonService {

	private Map<String, String> usersData;

	public void logon(String mailAddress, String password) {
		init();
		if (!usersData.containsKey(mailAddress)
				&& !usersData.containsValue(password))
			throw new LogonDenideException("ログオン情報が間違ってるか、存在しないユーザです。");

		SessionDto sessionDto = new SessionDto();
		sessionDto.setAuthenticated(true);
		sessionDto.setUserName(mailAddress.substring(0, mailAddress.indexOf('@')));

	}

	@RemoveSession(name="sessionDto")
	public void logout() {
		//コードはなし
		
	}

	private void init() {
		usersData = new HashMap<String, String>();
		usersData.put("user1@xxx.com", "pass1");
		usersData.put("user2@xxx.com", "pass2");
		usersData.put("user3@xxx.com", "pass3");
		usersData.put("user4@xxx.com", "pass4");
		usersData.put("user5@xxx.com", "pass5");
	}

}

こんな感じでとりあえずやっつけでServiceをこしらえたわけですが、SessionDtoがなんどやってもnullになってるんですよ。おかしいなぁと思ってよくよく考えてみたらDIしないとだめなんじゃね?と。(もちろんSessionDtoクラスには@Component(instance=InstanceType.SESSION)はつけてある。)そう思って以下の様に修正。

public class LogonServiceImpl implements LogonService {

	private Map<String, String> usersData;

	//修正箇所
	private SessionDto sessionDto;
	
	//修正箇所
	public void setSessionDto(SessionDto sessionDto) {
		this.sessionDto = sessionDto;
	}

	public void logon(String mailAddress, String password) {
		init();
		if (!usersData.containsKey(mailAddress)
				&& !usersData.containsValue(password))
			throw new LogonDenideException("ログオン情報が間違ってるか、存在しないユーザです。");

		//修正箇所
		sessionDto.setAuthenticated(true);
		sessionDto.setUserName(mailAddress.substring(0, mailAddress.indexOf('@')));

	}

	@RemoveSession(name="sessionDto")
	public void logout() {
		//コードはなし
		
	}

	//init()は省略
}

今度はちゃんと動いたwDIも慣れてないとついついnewとかしちゃうねぇ・・・。まぁ、いい勉強になったのでこれでよし。

しかし、周りに比べて現状やってることが激しく低レベルなのがくやしい。まぁ、そうは言ってもいきなりポーンと勝手にLvアップするわけじゃないので地道にいきましょう。ここを見てくれてる人達も影ながら応援してくれると嬉しいですよっと。