→ JRE: → Installed JREs... 버튼 클릭하여 설치한 jdk 버전 선택 → Finish 버튼 마우스로 클릭
4. Server 탭→ Tomcat v8.5 Server at localhost [Stopped, Republish] 마우스로 더블 클릭하여 실행
5. [Tomcat v8.5 Server at localhost] → [Server Locations] → Use Tomcat installation (takes control of Tomcat installation) 체크 → Deploy path: → Browse... 버튼 클릭하여 apache-tomcat-8.5.xx\webapps 폴더 선택 후 Ctrl + s로 설정 저장
package com.service;
import java.util.Arrays;
import java.util.List;
//타겟 (target object) ==> 핵심기능
public class DeptService {
public List<String> selectList(){
System.out.println("핵심기능:DeptService.selectList");
return Arrays.asList("AAA","BBB");
}
}
EmpService.java
package com.service;
//타겟 (target object) ==> 핵심기능
public class EmpService {
public void update() {
int num = 10/2;
System.out.println("핵심기능:EmpService.update");
}
}
PersonService.java
package com.service;
//타겟 (target object) ==> 핵심기능
public class PersonService {
public String delete() {
int num = 10/0;
System.out.println("핵심기능:PersonService.insert");
return "Hello";
}
}
UserService.java
package com.service;
//타겟 (target object) ==> 핵심기능
public class UserService {
//pointcut
public String list() {
return "UserService.list";
}
public String insert() {
System.out.println("핵심기능:UserService.insert");
return "UserService.insert";
}
public String insert2() {
return "UserService.insert2";
}
}
package com.service;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Service;
//타켓(target object) ==> 핵심기능
@Service
public class DeptService {
public List<String> selectList(){
System.out.println("핵심기능:DeptService.selectList");
return Arrays.asList("AAA", "BBB");
}
}
EmpService.java
package com.service;
import org.springframework.stereotype.Service;
//타켓(target object) ==> 핵심기능
@Service
public class EmpService {
public void update() {
int num = 10/2;
System.out.println("핵심기능:EmpService.update");
}
}
PersonService.java
package com.service;
import org.springframework.stereotype.Service;
// 타겟 (target object) ==> 핵심기능
@Service
public class PersonService {
public String delete() {
int num = 10/2;
System.out.println("핵심기능:PersonSerivce.insert");
return "Hello";
}
}
UserService.java
package com.service;
import org.springframework.stereotype.Service;
// 타켓(target object) ==> 핵심기능
@Service
public class UserService {
// pointcut
public String list() {
return "UserService.list";
}
public String insert() {
return "UserService.insert";
}
public String insert2() {
return "UserService.insert2";
}
}
SpEL - Spring Expression Language Spring Expression Language는 보통 SpEL로 표기하며 구두로는 Spring EL이라고 지칭한다. SpEL은 보통 객체를 조회하고 조작하는 기능을 제공하여 Unified EL과 유사하지만 Method 호출, 문자열 템플릿 기능 등의 여러가지 추가 기능을 제공하는 표현식 언어이다. Spring 3.0부터 지원된다.
Spring SpEL
MainClass.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.dto.Person;
public class MainClass {
public static void main(String[] args) {
ApplicationContext ctx = new GenericXmlApplicationContext("classpath:com/config/user.xml");
Person p2 = ctx.getBean("p2", Person.class);
System.out.println(p2);
}
}
Person.java
package com.dto;
public class Person {
String username;
int age;
boolean isMarried;
double weight;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMarried() {
return isMarried;
}
public void setMarried(boolean isMarried) {
this.isMarried = isMarried;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
@Override
public String toString() {
return "Person [username=" + username + ", age=" + age + ", isMarried=" + isMarried + ", weight=" + weight
+ "]";
}
}
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.dto.DeptDTO;
import com.service.DeptService;
public class MainClass {
public static void main(String[] args) {
ApplicationContext ctx = new GenericXmlApplicationContext("classpath:com/config/dept.xml");
DeptService service = ctx.getBean("deptService", DeptService.class);
// 1. 저장 ==> Spring + Mybatis는 자동으로 commit된다.
// int num = service.insert(new DeptDTO(99, "IT", "부산"));
// int num2 = service.update(new DeptDTO(99, "AI", "서울"));
// int num3 = service.delete(99);
// transaction 처리
try {
service.tx();
} catch (Exception e) {
System.out.println(e.getMessage());
}
List<DeptDTO> list = service.selectAll();
System.out.println(list);
}
}
DeptDAO.java
package com.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.dto.DeptDTO;
@Repository("deptDAO")
public class DeptDAO {
@Autowired
SqlSession session; // null
// SqlSessionTemplate session;
public List<DeptDTO> selectAll(){
return session.selectList("com.config.DeptMapper.selectAll");
}
public DeptDTO selectByDeptno(int deptno) {
return session.selectOne("com.config.DeptMapper.selectByDeptno", deptno);
}
public int insert(DeptDTO dto) {
return session.insert("com.config.DeptMapper.insert", dto);
}
public int update(DeptDTO dto) {
return session.update("com.config.DeptMapper.update", dto);
}
public int delete(int deptno) {
return session.delete("com.config.DeptMapper.delete", deptno);
}
}
DeptDTO.java
package com.dto;
import org.apache.ibatis.type.Alias;
@Alias("DeptDTO")
public class DeptDTO {
int deptno;
String dname;
String loc;
public DeptDTO() {
}
public DeptDTO(int deptno, String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
}
DeptService.java
package com.service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.dto.DeptDTO;
@Service("deptService")
public interface DeptService {
// 전체 레코드 조회
public List<DeptDTO> selectAll();
// 특정 레코드 조회
public DeptDTO selectByDeptno(int deptno);
// 저장
public int insert(DeptDTO dto);
// 수정
public int update(DeptDTO dto);
// 삭제
public int delete(int deptno);
// 트랜잭션 실습 메서드
public void tx() throws Exception;
}
DeptServiceImpl.java
package com.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.dao.DeptDAO;
import com.dto.DeptDTO;
@Service("deptService")
public class DeptServiceImpl implements DeptService {
@Autowired
DeptDAO dao; //null
@Override
public List<DeptDTO> selectAll() {
return dao.selectAll();
}
@Override
public DeptDTO selectByDeptno(int deptno) {
return dao.selectByDeptno(deptno);
}
@Override
public int insert(DeptDTO dto) {
return dao.insert(dto);
}
@Override
public int update(DeptDTO dto) {
return dao.update(dto);
}
@Override
public int delete(int deptno) {
return dao.delete(deptno);
}
// 트랜잭션 실습 메서드
@Transactional
@Override
public void tx() throws Exception {
int num = dao.insert(new DeptDTO(96, "IT", "서울"));
int num2 = dao.delete(1);
}
}
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.dto.DeptDTO;
import com.service.DeptService;
public class MainClass {
public static void main(String[] args) {
ApplicationContext ctx = new GenericXmlApplicationContext("classpath:com/config/dept.xml");
DeptService service = ctx.getBean("deptService", DeptService.class);
// 1. 저장 ==> Spring + Mybatis는 자동으로 commit된다.
// int num = service.insert(new DeptDTO(99, "IT", "부산"));
// int num2 = service.update(new DeptDTO(99, "AI", "서울"));
// int num3 = service.delete(99);
List<DeptDTO> list = service.selectAll();
System.out.println(list);
}
}
DeptDAO.java
package com.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.dto.DeptDTO;
@Repository("deptDAO")
public class DeptDAO {
@Autowired
SqlSession session; // null
// SqlSessionTemplate session;
public List<DeptDTO> selectAll(){
return session.selectList("com.config.DeptMapper.selectAll");
}
public DeptDTO selectByDeptno(int deptno) {
return session.selectOne("com.config.DeptMapper.selectByDeptno", deptno);
}
public int insert(DeptDTO dto) {
return session.insert("com.config.DeptMapper.insert", dto);
}
public int update(DeptDTO dto) {
return session.update("com.config.DeptMapper.update", dto);
}
public int delete(int deptno) {
return session.delete("com.config.DeptMapper.delete", deptno);
}
}
DeptDTO.java
package com.dto;
import org.apache.ibatis.type.Alias;
@Alias("DeptDTO")
public class DeptDTO {
int deptno;
String dname;
String loc;
public DeptDTO() {
}
public DeptDTO(int deptno, String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
@Override
public String toString() {
return "DeptDTO [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";
}
}
DeptService.java
package com.service;
import java.util.List;
import org.springframework.stereotype.Service;
import com.dto.DeptDTO;
@Service("deptService")
public interface DeptService {
// 전체 레코드 조회
public List<DeptDTO> selectAll();
// 특정 레코드 조회
public DeptDTO selectByDeptno(int deptno);
// 저장
public int insert(DeptDTO dto);
// 수정
public int update(DeptDTO dto);
// 삭제
public int delete(int deptno);
}
DeptServiceImpl.java
package com.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.dao.DeptDAO;
import com.dto.DeptDTO;
@Service("deptService")
public class DeptServiceImpl implements DeptService {
@Autowired
DeptDAO dao; //null
@Override
public List<DeptDTO> selectAll() {
return dao.selectAll();
}
@Override
public DeptDTO selectByDeptno(int deptno) {
return dao.selectByDeptno(deptno);
}
@Override
public int insert(DeptDTO dto) {
return dao.insert(dto);
}
@Override
public int update(DeptDTO dto) {
return dao.update(dto);
}
@Override
public int delete(int deptno) {
return dao.delete(deptno);
}
}
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.service.UserService;
public class MainClass {
public static void main(String[] args) {
// IoC Container
ApplicationContext ctx =
new GenericXmlApplicationContext("classpath:com/config/user.xml");
UserService service = ctx.getBean("service", UserService.class);
List<String> list = service.list();
System.out.println(list);
}
}
UserDAO.java
package com.dao;
import java.util.Arrays;
import java.util.List;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
// @Component // @Component는 전부 Class Level
@Repository("dao")
public class UserDAO {
public UserDAO() {
System.out.println("UserDAO 생성자");
}
// DB 연동 가정
public List<String> list(){
List<String> list = Arrays.asList("고길동", "홍길동", "신길동");
return list;
}
}
UserService.java
package com.service;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.dao.UserDAO;
// POJO Class
// @Component // @Component는 전부 Class Level
@Service("service")
public class UserService {
@Autowired
UserDAO dao; // property (인스턴스 변수)
public UserService() {
System.out.println("UserService 생성자");
}
public List<String> list(){
return dao.list();
}
}
user.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 http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- @ 어노테이션 활성화 -->
<!-- <context:annotation-config /> --> <!-- empty tag -->
<!-- 내부적으로 <context:annotation-config /> 기능 포함 -->
<!-- 마킹된(Component) Bean들의 Pakage Name 지정 -->
<context:component-scan base-package="com.service, com.dao" /> <!-- empty tag -->
<!-- <context:component-scan base-package="com.*" /> -->
</beans>
<!-- @ 어노테이션 활성화 -->
<context:annotation-config />
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.service.UserService;
public class MainClass {
public static void main(String[] args) {
// IoC Container
ApplicationContext ctx =
new GenericXmlApplicationContext("classpath:com/config/user.xml");
UserService service = ctx.getBean("service", UserService.class);
List<String> list = service.list();
System.out.println(list);
UserService service2 = ctx.getBean("service2", UserService.class);
List<String> list2 = service2.list();
System.out.println(list2);
UserService service3 = ctx.getBean("service3", UserService.class);
List<String> list3 = service3.list();
System.out.println(list3);
}
}
UserDAO.java
package com.dao;
import java.util.Arrays;
import java.util.List;
public class UserDAO {
// DB 연동 가정
public List<String> list(){
List<String> list = Arrays.asList("홍길동", "고길동", "신길동");
return list;
}
}
UserService.java
package com.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.dao.UserDAO;
public class UserService {
@Autowired
UserDAO dao;
// user.xml 2. property는 기본 생성자가 있어야 에러가 안남
public UserService() {
}
// 생성자 주입
public UserService(UserDAO dao) {
this.dao = dao;
}
// setter 메서드 주입
public void setDao(UserDAO dao) {
this.dao = dao;
}
public List<String> list(){
return dao.list();
}
}
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.service.UserService;
public class MainClass {
public static void main(String[] args) {
// IoC Container
ApplicationContext ctx =
new GenericXmlApplicationContext("classpath:com/config/user.xml");
UserService service3 = ctx.getBean("service3", UserService.class);
List<String> list3 = service3.list();
System.out.println(list3);
}
}
UserDAO.java
package com.dao;
import java.util.Arrays;
import java.util.List;
public class UserDAO {
// DB 연동 가정
public List<String> list(){
List<String> list = Arrays.asList("홍길동", "고길동", "신길동");
return list;
}
}
UserService.java
package com.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.dao.UserDAO;
public class UserService {
@Autowired(required = false) // 가장 많이 사용
UserDAO dao;
public List<String> list(){
return dao.list();
}
}
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.service.UserService;
public class MainClass {
public static void main(String[] args) {
// IoC Container
ApplicationContext ctx =
new GenericXmlApplicationContext("classpath:com/config/user.xml");
UserService service3 = ctx.getBean("service3", UserService.class);
List<String> list3 = service3.list();
System.out.println(list3);
}
}
UserDAO.java
package com.dao;
import java.util.Arrays;
import java.util.List;
public class UserDAO {
// DB 연동 가정
public List<String> list(){
List<String> list = Arrays.asList("홍길동", "고길동", "신길동");
return list;
}
}
UserService.java
package com.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.dao.UserDAO;
public class UserService {
@Autowired // 가장 많이 사용
@Qualifier("userDAO") // 명시적으로 누구를 쓸 것인지 찍어서 설정하면 에러가 안남 ㅋ
UserDAO dao;
public List<String> list(){
return dao.list();
}
}