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")