<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<!-- => 클래스에 생성자 또는 메소드를 자동으로 생성하는 기능을 제공하는 라이브러리 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
<scope>provided</scope>
</dependency>
Jar 프로그램을 실행하여 제공된 창에서 Lombok를 사용할 이클립스(eclipse.exe)를 선택하여 Lombok 설치
이클립스를 실행하여 Lombok 라이브러리가 제공하는 어노테이션 사용
이클립스가 실행되지 않는 경우 Lombok이 설치된 이클립스 폴더로 이동하여 eclipse.ini 파일 변경
Lombok 라이브러리가 제공하는 어노테이션 사용
회원정보를 저장하기 위한 클래스 (VO 클래스 : 값을 저장하기 위한 목적의 객체를 생성하기 위한 클래스)
@Setter : 필드의 Setter 메소드를 자동 생성하여 제공하는 어노테이션
@Getter : 필드의 Getter 메소드를 자동 생성하여 제공하는 어노테이션
@ToString : 클래스의 필드값을 반환하는 toString 메소드를 자동 생성하여 제공하는 어노테이션
@Data : Setter, Getter, toString 메소드 등을 자동 생성하는 어노테이션
package xyz.itwill05.lombok;
import lombok.Data;
@Data
public class Member {
private String id;
private String name;
private String email;
}
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<bean class="xyz.itwill05.lombok.Member" id="member">
<property name="id" value="abc123"/>
<property name="name" value="홍길동"/>
<property name="email" value="abc@itwill.xyz"/>
</bean>
<context:component-scan base-package="xyz.itwill05.lombok"/>
</beans>
XSD : XML 스키마 정의(XML Schema Definition)
annotation을 사용하기 위해서는 환경설정 파일 생성시 context XSD가 사용됨
package xyz.itwill05.lombok;
import java.util.List;
public interface MemberDAO {
int insertMember(Member member);
int updateMember(Member member);
int deleteMember(String id);
Member selectMember(String id);
List<Member> selectMemberList();
}
package xyz.itwill05.lombok;
import java.util.List;
import org.springframework.stereotype.Repository;
@Repository
public class MemberDAOImpl implements MemberDAO {
public MemberDAOImpl() {
System.out.println("### MemberDAOImpl 클래스의 기본 생성자 호출 ###");
}
@Override
public int insertMember(Member member) {
System.out.println("*** MemberDAOImpl 클래스의 insertMember(Member member) 메소드 호출 ***");
return 0;
}
@Override
public int updateMember(Member member) {
System.out.println("*** MemberDAOImpl 클래스의 updateMember(Member member) 메소드 호출 ***");
return 0;
}
@Override
public int deleteMember(String id) {
System.out.println("*** MemberDAOImpl 클래스의 deleteMember(String id) 메소드 호출 ***");
return 0;
}
@Override
public Member selectMember(String id) {
System.out.println("*** MemberDAOImpl 클래스의 Member seleteMember(String id) 메소드 호출 ***");
return null;
}
@Override
public List<Member> selectMemberList() {
System.out.println("*** MemberDAOImpl 클래스의 seleteMemberList() 메소드 호출 ***");
return null;
}
}
package xyz.itwill05.lombok;
import java.util.List;
public interface MemberService {
void addMember(Member member);
void modifyMember(Member member);
void removeMember(String id);
Member getMember(String id);
List<Member> getMemberList();
}
@AllArgsConstructor : 클래스에 작성된 모든 필드의 초기화를 위한 매개변수가 선언된 생성자를 자동으로 만들어주는 어노테이션
@RequiredArgsConstructor : 클래스에 작성된 필드 중 final 키워드를 사용하여 선언된 필드의 초기화를 위한 매개변수가 선언된 생성자를 자동으로 만들어주는 어노테이션
private final MemberDAO memberDAO;
- @Autowired 의존성 주입
필드에 @Autowired 어노테이션을 선언하여 의존성 주입 (필드 의존성 주입)
필드의 Setter 메소드에 @Autowired 어노테이션을 선언하여 필드에 의존성 주입 (Setter 의존성 주입)
필드를 초기화 시키는 매개변수가 선언된 생성자에 @Autowired 어노테이션을 선언하여 필드에 의존성 주입 (생성자 의존성 주입)
package xyz.itwill05.lombok;
import java.util.List;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
@Service
//@AllArgsConstructor
//@RequiredArgsConstructor : 클래스에 작성된 필드 중 final 키워드를 사용하여 선언된 필드의
//초기화를 위한 매개변수가 선언된 생성자를 자동으로 만들어주는 어노테이션 - Lombok 라이브러리에서 제공되는 어노테이션
// => 생성자를 이용하여 원하는 필드에 대한 의존성 주입
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService {
//필드에 @Autowired 어노테이션을 선언하여 의존성 주입 - 필드 의존성 주입
// => 필드에 대한 Setter 메소드가 없어도 필드에 의존성 주입 가능
// => 가장 간단한 의존성 주입 방법이지만 순환 참조시 에러가 발생되지 않아 StackOverFlow 발생 가능
//@Autowired
//private MemberDAO memberDAO;
//@RequiredArgsConstructor 어노테이션으로 생성자를 이용하여 의존성 주입을 하기 위한 필드에는
//반드시 final 키워드를 사용하여 선언
private final MemberDAO memberDAO;
//필드의 Setter 메소드에 @Autowired 어노테이션을 선언하여 필드에 의존성 주입 - Setter 의존성 주입
// => Setter 메소드의 접근지정자가 [public]인 경우 다른 클래스에서 Setter 메소드가
//호출되어 의존관계 변경 가능
/*
@Autowired
public void setMemberDAO(MemberDAO memberDAO) {
System.out.println("*** MemberServiceImpl 클래스의 setMemberDAO(MemberDAO memberDAO) 메소드 호출 ***");
this.memberDAO = memberDAO;
}
*/
/*
public MemberServiceImpl() {
System.out.println("### MemberServiceImpl 클래스의 기본 생성자 호출 ###");
}
*/
//필드를 초기화 시키는 매개변수가 선언된 생성자에 @Autowired 어노테이션을 선언하여
//필드에 의존성 주입 - 생성자 의존성 주입
// => Spring Framework에서는 순환 참조 방지를 위해 생성자 의존성 주입 권장
// => 생성자를 이용하여 의존성 주입할 때 생성자가 하나만 선언된 경우 @Autowired 생략 가능
//@Autowired
/*
public MemberServiceImpl(MemberDAO memberDAO) {
super();
this.memberDAO = memberDAO;
System.out.println("### MemberServiceImpl 클래스의 매개변수가 선언된 생성자 호출 ###");
}
*/
@Override
public void addMember(Member member) {
System.out.println("*** MemberServiceImpl 클래스의 addMember(Member member) 메소드 호출 ***");
memberDAO.insertMember(member);
}
@Override
public void modifyMember(Member member) {
System.out.println("*** MemberServiceImpl 클래스의 modifyMember(Member member) 메소드 호출 ***");
memberDAO.updateMember(member);
}
@Override
public void removeMember(String id) {
System.out.println("*** MemberServiceImpl 클래스의 removeMember(String id) 메소드 호출 ***");
memberDAO.deleteMember(id);
}
@Override
public Member getMember(String id) {
System.out.println("*** MemberServiceImpl 클래스의 getMember(String id) 메소드 호출 ***");
return memberDAO.selectMember(id);
}
@Override
public List<Member> getMemberList() {
System.out.println("*** MemberServiceImpl 클래스의 getMemberList() 메소드 호출 ***");
return memberDAO.selectMemberList();
}
}
package xyz.itwill05.lombok;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MemberApp {
public static void main(String[] args) {
System.out.println("================== Spring Container 초기화 전 ==================");
ApplicationContext context=new ClassPathXmlApplicationContext("05-5_lombok.xml");
System.out.println("================== Spring Container 초기화 후 ==================");
Member member=context.getBean("member",Member.class);
//참조변수를 출력할 경우 Member.toString() 메소드를 호출하여 반환값 출력
System.out.println("member = "+member);
System.out.println("================================================================");
MemberService service=context.getBean("memberServiceImpl", MemberService.class);
service.addMember(member);
service.modifyMember(member);
service.removeMember("abc123");
service.getMember("abc123");
service.getMemberList();
System.out.println("================================================================");
((ClassPathXmlApplicationContext)context).close();
}
}