1.1. User ¶
- 보를 때 바 규 따르는 브를 면 리다.
- 바(JavaBean)
- 단 라고 다.
- 래 미는 가능 .
-
- 라미가 는 디 를 가고 고
- getter setter를 , 는 로를 가 브를 미다.
- 라미가 는 디 를 가고 고
- 단 라고 다.
- 바(JavaBean)
- User : 보 바 래
package springbook.user.domain; public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
- USER 블
드명 | ||
UserId | VARCHAR(10) | Primary Key |
Name | VARCHAR(20) | Not Null |
Password | VARCHAR(20) | Not Null |
1.2. UserDao ¶
- UserDao : JDBC를 록, 기능 는 DAO 래
package springbook.user.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import springbook.user.domain.User; public class UserDao { public void add(User user) throws SQLException, ClassNotFoundException{ Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book"); PreparedStatement ps = c.prepareStatement("insert into users(id, name, password) values(?,?,?)"); ps.setString(1, user.getId()); ps.setString(2, user.getName()); ps.setString(3, user.getPassword()); ps.executeUpdate(); ps.close(); c.close(); } public User get(String id) throws ClassNotFoundException, SQLException{ Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book"); PreparedStatement ps = c.prepareStatement("select * from users where id = ?"); ps.setString(1, id); ResultSet rs = ps.executeQuery(); rs.next(); User user = new User(); user.setId(rs.getString("id")); user.setName(rs.getString("name")); user.setPassword(rs.getString("password")); rs.close(); ps.close(); c.close(); return user; } }
1.3. main() ¶
- 만든 래가 대로 동는 려면
- DAO 기능 는 리 만들 배 뒤 브라를 보나
- UserDao 드가 동는 기 무 복 .
- UserDao 드가 동는 기 무 복 .
- 브가 로 검록 만들다.
- DAO 기능 는 리 만들 배 뒤 브라를 보나
- main 메드를 드
public static void main(String[] args) throws SQLException, ClassNotFoundException { UserDao dao = new UserDao(); User user = new User(); user.setId("zeropage"); user.setName("로"); user.setPassword("zp"); dao.add(user); System.out.println(user.getId() + "록 공"); User user2 = dao.get(user.getId()); System.out.println(user2.getName()); System.out.println(user2.getPassword()); System.out.println(user2.getId() + " 공"); }
- 가 공면 다과 같 력된다.
zeropage 록 공 로 zp zeropage 공
2.1. 관 리 ¶
- 리 기될 때까 브 드는 끊 변다. 그렇다면 변 떻게 대 것가?
- 가 대 : 변 로 다.
- 동 기능 변경 때
- 단 몇 드만 고 뒤 문 동 보는데 5 리는 개발 > 드를 는데 5 리고 뒤 문 동는 는 개발
- 단 몇 드만 고 뒤 문 동 보는데 5 리는 개발 > 드를 는데 5 리고 뒤 문 동는 는 개발
- 떻게?
- 리 고려
- 리 고려
- 동 기능 변경 때
- 모든 변경과 발 가 관 나만 그 따른 곳 되 는 경가 많다.
- 관 리
- 가 관 군데 되게 라.
- 관 같 것끼리는 나 객 로, 관 다른 것 가능 떨 록 리.
- 가 관 군데 되게 라.
- 관 리
2.2.1. UserDao 관 ¶
- DB 결 떻게 가 것가.
- 록/를 SQL문 담 Statement를 만들고 는 것.
- 끝나고 리를 close는 것.
- 가 문 : DB 결 브 가기
- add() 메드 get() 메드 동 드가 복되 다.
- 로 개 DAO 메드를 만든다고 면
- DB 가는 드가 군데 복로 게 되
- DB 가는 방 바뀌면 군데를 나나 다.
- DB 가는 드가 군데 복로 게 되
- 로 개 DAO 메드를 만든다고 면
- add() 메드 get() 메드 동 드가 복되 다.
2.2.2. 복 드 메드 ¶
- 가는 복된 드를 리다.
- UserDao : getConnection() 메드를 복
public void add(User user) throws SQLException, ClassNotFoundException { Connection c = getConnection(); … } public void get(String id) throws SQLException, ClassNotFoundException { Connection c = getConnection(); … } private Connection getConnection() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book"); }
- 개 DAO 메드가 DB 가는 방 바뀌면 getConnection() 메드만 면 된다.
3. DAO ¶
- 관 따라 브 나기
- 관가 다르다
- 변 격 다르다
- 변 격 다르다는 것 변 기, 기가 다르다는 것 미
- 변 격 다르다는 것 변 기, 기가 다르다는 것 미
- 래를 만들놓고 변를 구는 방법 -> 다
- 관가 다르다
- 1.3.1 래 리
- 로 다른 관를 독립 래로 리보
- 기 드를 때는 기능 변가 닌 내부 를 변경 더 나 드를 만드는 것 다(리링)
- 리링 기능 변가 는 검 다. 드가 를 검 다.
- 기 드를 때는 기능 변가 닌 내부 를 변경 더 나 드를 만드는 것 다(리링)
- 리된 두 래는 관를 가다.
- 로 다른 관를 독립 래로 리보
- 1.3.2
- 래 리 가 두 래가 낮 결를 가 다는 것다.
- 떤 것들 공 격 뽑내 를 따로 리내는
- interface
- 보다 관 가능
- 떤 것들 공 격 뽑내 를 따로 리내는
- 래 리 가 두 래가 낮 결를 가 다는 것다.
- 1.3.3 관 리
- 드 기가 고 단 래는 다른 독립 관를 가고 다면 리다.
- 래 다.
- 래 다.
- 래 관
- 브 브 관 미다.
- 런 관 : 브 관란 런 브가 다른 브 런를 가고는 것.
- 방법
- 브를 내부
- 로 구된 라메를 부 달는다. (다)
- 브를 내부
- 브 브 관 미다.
- 드 기가 고 단 래는 다른 독립 관를 가고 다면 리다.
- 1.3.4 과
- 개방 (OCP) 객 (SOLID)
- 래나 모 는 려 고 변경는 닫 다
- 래나 모 는 려 고 변경는 닫 다
- 높 낮 결
- 개방 리
- 높
- 변가 날 때 당 모 변는 부 다는 것 미다.
- 변가 날 때 당 모 변는 부 다는 것 미다.
- 낮 결
- 높 보다 민감
- 결란 나 브가 관 는 다른 브게 변를 구는 를 미다.
- 변가 다른 모나 브게 되 는 것 다.
- 높 보다 민감
- 개방 리
- 략
- 디 부
- 변경 고리 를 부로 리고, 를 구 래를 따라 바꿔 게 는
- 디 부
- 개방 (OCP) 객 (SOLID)
- 결국.. 링란?
- 객 과 디 나난 럽게 개발들 게 는
- 객 과 디 나난 럽게 개발들 게 는
4. (IoC) ¶
- 1.4.1 브 리
- 리
- 객 방법 결고 만들 브를 돌려다.
- 관 리 - 브를 는 과 된 브를 는 리는 다.
- DaoFactory : 리 는 브 구를 결는 브를 리.
- 객 방법 결고 만들 브를 돌려다.
- 리
- 1.4.2 브 리
- 브 드 반복 리다
- 브 드 반복 리다
public class DaoFactory{ // ConnectionMaker를 고 는 드가 반복됨 public UserDao userDao( ){ return new UserDao(new DConnectionMaker()); } public AccountDao accountDao( ){ return new AccountDao(new DConnectionMaker()); } public MessageDao messageDao( ){ return new MessageDao(new DConnectionMaker()); } }리
public class DaoFactory{ public UserDao userDao( ){ return new UserDao(connectionMaker()); } public AccountDao accountDao( ){ return new AccountDao(connectionMaker()); } public MessageDao messageDao( ){ return new MessageDao(connectionMaker()); } // 복 드 리 public ConnectionMaker connectionMaker(){ return new DConnectionMaker(); } }리
- 1.4.3 권 관
- 란?
- 로그램 구가 뒤바뀌는 것
- 권 다른 대게 다.
- 는 된 대 기다.
- 라브러리는 리 능동로 다.
- 반면 는 리 드가 된다.
- 라브러리는 리 능동로 다.
- 로그램 구가 뒤바뀌는 것
- 란?
- 링 IoC를 극까 다.
- 는 명 개념 되 다.
- 는 명 개념 되 다.
5. 링 IoC ¶
5.1 브 리를 링 IoC
- 5.1.1
- 5.1.2
- 리 또는 리 보를 만드는 방법 ->
- 1. 링 리를 브 담당는 래라고 록 @Configuration라는 노 가다.
- 1. 링 리를 브 담당는 래라고 록 @Configuration라는 노 가다.
- 리 또는 리 보를 만드는 방법 ->
@Configuration public class DaoFactory{}
- 2. 브를 만들는 메드는 @Bean라는 노 붙다.
@Configuration public class DaoFactory{ @Bean public UserDao userDao(){ ...} }
- 만들 보를 는 리 및 ->
public static void main(Strings[] args) throws ClassNotFoundException, SQLException{ ApplicatioContext context = new AnnotationConfigApplicationContext(DaoFactory.class); }
- 2. 된 ApplicationContext getBean()메드를 록된 브를 가 다.
public static void main(Strings[] args) throws ClassNotFoundException, SQLException{ ApplicatioContext context = new AnnotationConfigApplicationContext(DaoFactory.class); UserDao dao = context.getBean("userDao", UserDao.class); }
getBean()메드 : ApplicationContext가 관리는 브를 는 메드. "" 들가는 것 ApplicationContext 록된 . 가다는 것 메드를 결과를 가다고 각면 된다. 는 userDao()라는 메드 붙기 때문 "" userDao가 들갔다. 메드 myUserDao()라면 "myUserDao"가 된다. 기본로 Object로 리게 되 다 만 바 5 릭 메드 방 두 라미 리 면 된다.
5.2 리 동방6. 글 리 브 ¶
6.1 글 리로 리
- 리 는 글 고 관리는 글 리기 다. 링 기본로 다른 면 내부 는 브를 모두 글로 만든다.
- 링 로 경 되기 때문 리는 부를 기 글로 만들게 되다. 링 는 글 , 관리는 글 관리 기 다.
- 반 글 구
- 1. private 를 가고 기 때문 다.
- 2. 글 기가 들다.
- 3. 경는 글 나만 만들는 것 보 못다.
- 4. 글 를 만들 기 때문 바람 못다.
- 1. private 를 가고 기 때문 다.
- 글 브 변를 로 값 덮고 기 때문 다. 기 가 보라면 변로 다.
- (scope) : 링 관리는 되고 고 되는 범. 기본 는 글로 내 개 브만 만들 강로 는 된다. 경 따라 글 로(prototype), (request), (session) 가 다.
7. 관 (DI) ¶
- 관 : 두 래 또는 모 때 변가 다른 미는 .
- 관 (DI)? : 관 (Dependency Injection)란 링 된 (IoC) 방 더 명게 나내기 다.
- 관 가
- 래 모델나 드는 런 관가 드러나 는다. 그러기 는 만 고 다.
- 런 관는 나 리 같 3 가 결다.
- 관는 브 대 런를 부 공()로 만들다.
- 래 모델나 드는 런 관가 드러나 는다. 그러기 는 만 고 다.
- 관 가
- DI : DI를 경 된 브를 로 는데 렇게 면 드 런 래 관가 드러나 기 때문 는 브를 바꿔는 것로 드 변경, 게 대 다.
- 링 DI
- Bean : 링는 DI를 게 기 Bean 브를 관리다.
- Bean Factory : 런 관를 결기 Bean Factory Bean 관리고 브 관를 맺다.
- 관 검(Dependency Lookup) : 링 DI방 기 는 DI를 는 브가 반드 Bean 다. 만 DL 면 Bean 닌 브 관를 다.
- Bean : 링는 DI를 게 기 Bean 브를 관리다.
8. XML ¶
- XML
- 링는 DI관를 만들 때 로 드를 는 것 다 방 공고 다. XML 단 기 때문 다루기 고 가 빌드 다.
- <beans> : @Configuration 대다. 러 개 <bean> 들다.
- <bean> : @Bean 붙 바 메드 대다.
- <id> : @Bean 메드 . getBean() 다.
- <class> : @Bean 메드가 return는 값. 까 모두 다.
- <property> : @Bean 메드 DI를 때 다. 메드다.
- <name> : 메드 set부 나머 부 다.
- <ref> : 메드를 브 Bean id다.
- <value> : 다른 Bean 브가 라 단 값 때 <ref> 대 다. 링 로 값 게 변기 때문 링, 브 다 값 다.
- <name> : 메드 set부 나머 부 다.
- <id> : @Bean 메드 . getBean() 다.
- <bean> : @Bean 붙 바 메드 대다.
- <beans> : @Configuration 대다. 러 개 <bean> 들다.
- (Java 드)
@Configuration class DaoFactory { ... @Bean public ConnectionMaker connectionMaker() { return new DConnectionMaker(); } @Bean userDao setConnectionMaker(connectionMaker()) { ... }; }
- (XML)
<beans> <bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker" /> <bean id="userDao" class="springbook.dao.UserDao"> <property name="connectionMaker ref="myConnectionMaker" /> </bean> </beans>
- XML 는 리
- 리 GenericXmlApplicationContext("xml 경로")를 를 다.
- 리 GenericXmlApplicationContext("xml 경로")를 를 다.
ApplicationContext context = new GenericXmlApplicationContext("springbook/user/dao/daoContext.xml")