% Object Factory == Application Context == IoC
Bean == IoC 를 이용홰 관리되는 Object
Bean Factory == Bean 을 관리하는 Object
ApplicationContext == Bean Factory 를 확장한 IoC (각종 부가적인 기능을 제공)
Confituration Metadata == ...?
Bean 은 Spring 의 Singletone Register 에 의해 Singletone으로 관리된다. 따라서 getBean 메소드로 같은 Bean을 호출하더라도 하나의 Bean Object 를 Reference 한다.
Bean Scope == Bean이 생성되고 존재하고 적용되는 범위
DI == Defendency Injection (의존성 주입)
DI Container == DaoFactory
-XML 을 이용한 DI
1. Connection Bean DI
@Bean -------------------------------------------> <bean
public ConnectionMaker
connectionMaker(){ ----------------------------> id="connectionMaker"
return new OracleConnectionMaker();-----> class="springbook.....OracleConnectionMaker" />
}
2. setConnectionMaker DI
userDao.setConnectionMaker(connectionMaker());
<property name"connectionMaker" ref="connectionMaker" />
name = set 을 제외한 함수이름
ref = parameter 의 의존성을 주입할 Bean 의 id ( 1번사항에서 id )
3. DataSource 를 XML 방식으로 값 주입
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource" >
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/springbook" />
<property name="username" value="root" />
<property name="password" value="ampsetup" />
</bean>
- Junit 을 이용한 테스트기반의 프로그래밍 (TDD)
1. 기존 main 메소드에서 실행하는 코드를 별도의 UserDaoTest class 생성후 main을 다시 만들어 실행했음
-> @Test 이용
public class UserDaoTest{
@Test
public void addAndGet() throws SQLExecption { ------------ 반드시 public 으로 메소드 생성
ApplicationContext context = new
~~~~~
}
2. if ~ else 문장으로 쿼리받은 데이터를 비교하는 방식을 assertThat 으로 치환
assertThat(user2.getname(), is(user.getName()));
user2.getName() 과 user.getName() 을 비교
3. 실제 main 부분
public static void main(String[] args){
JUnitCore.main("springbook.user.dao.UserDaoTest");
}
JUnitCore 을 이용해서 테스트할 Class 를 넣어준다.
4. 테스트의 일관성을 위해 DB를 이용시 deleteAll() 과 getCount() 메소드를 추가함으로써
테스트 실행시 기존의 모든 데이터를 삭제 후에 코드를 수행한다.
이후 getCount를 통해 테스트코드가 몇레코드를 삽입하였는지 등을 체크할 수 있게 한다.
5. @Before
각 테스트 메소드에는 중복되는 ApplicationContext를 생성하고 Bean 을 get 하는 부분의 코드가 있다.
이를 모두 하나로 모아서 하나의 Context 설정을 따르기 위해서는
@Before 을 이용한 setUp() 메소드를 하나 정의한다.
@Befor
public void setUp(){
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
this.dao = context.getBean("userDao", UserDao.class);
}
6. 모든 TEST class 가 하나의 ApplicationContext 를 공유하기위한 방법
public class UserDaoTest{
@Autowired
private ApplicationContext context;
@Before
public void setUp(){
this.dao = this.context.getBean~~~ -------------> setUp 에 더이상 ApplicationConext를 생성하는 코드를 적지 않는다.
대신 모든 Test class에 @Befor이전의 Code를 적어야한다..(비슷한거같은데..)
하나의 Obejct 를 reference 한다는거 말곤 큰 차이는 없는듯 하다.
자 이제 2장을 끝냈고 3장에 Template Method Pattern 을 사용할 차례.. Exception 처리 부분의 코드를 최소화하는 과정인듯.
댓글 없음:
댓글 쓰기