토비의 스프링(11)
-
6장 AOP
# 메소드 분리 기존 코드에서 비즈니스 로직을 사이에 두고 트렌젝션 시작과 종료 담당 코드가 전후로 위치한 것을 볼 수 있음. 또한 트랜잭션 경계설정의 코드와 비즈니스 로직 코드 간에 서로 주고받는 정보가 없음 이 두 코드는 성격이 다를 뿐 아니라 서로 주고받는 것도 없는, 완벽하게 독립된 코드 ## 트랜젝션 경계 설정 코드 분리의 장점 - 비즈니스 로직을 담당하고 있는 코드를 작성할 때 트랜젝션과 같은 기술적인 내용에 전혀 신경을 안써도 . - 비즈니스 로직에 대한 테스트를 손쉽게 만들어낼 수 있음 # 다이나믹 프록시와 팩토리 빈 트랜잭션 기능은 비즈니스 로직과는 성격이 다르기 때문에 아예 그 정용 사실 자체를 밖으로 분리할 수 있었음. 부가기능 외의 나머지 모든 기능은 원래 핵심기능을 가진 클래스로 ..
2023.04.02 -
JdbcTemplate 사용 및 람다식으로 축약하기
이전 포스팅에서 템플릿과 콜백의 기본적인 원리와 동작방식, 만드는 방법에 대해 알아보았다. 스프링에도 JDBC를 이용하는 DAO에서 사용할 수 있도록 다양한 템플릿과 콜백을 제공한다. 스프링에서 제공하는 JDBC 코드용 기본 템플릿은 JdbcTemplate이다. 한번 사용해보자 public class UserDao { private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } ... }update() update() 메서드는 PreparedStatementCreator타입을 콜백 받아서 사용한다. 다음과 같이 사용하..
2022.01.17 -
템플릿/콜백 패턴 예시, 익명 클래스를 람다식으로 변환
간단한 템플릿/콜백 예제를 하나 만들어보자. 파일을 하나 열어서 모든 라인의 숫자를 더한 합을 돌려주는 코드를 만들어보겠다. 우선 숫자가 담긴 numbers.txt파일을 하나 먼저 만든다. 1 2 3 4모든 라인의 숫자의 합은 10이다. numbers.txt파일의 경로를 주면 10을 돌려받는 메서드에 대한 테스트를 제작해보자 public class CalculatorTest { @Test public void sumOfNumbers() throws IOException { Calculator calculator = new Calculator(); int sum = calculator.calcSum("C:\\tobyTest\\src\\test\\java\\springbook\\callbackSample\\..
2022.01.17 -
중첩클래스와 익명 클래스로 클래스 파일 간소화
이전 포스팅에 작성한 코드들을 다시 살펴보자 public class UserDao { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void add(User user) throws SQLException { StatementStrategy st = new AddStatement(user); jdbcContextWithStatementStrategy(st); } public User get(String id) throws SQLException { Connection c = null; PreparedStatement ps = null; R..
2022.01.17 -
try/catch/finally로 예외 처리 및 전략 패턴으로 중복 컨텍스트 추출
이전 포스팅에 작성한 코드를 다시 살펴보자 public class UserDao { private DataSource dataSource; public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void add(User user) throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c.prepareStatement("insert into users(id, name, password) values (?,?,?)"); ps.setString(1, user.getId()); ps.setString(2,..
2022.01.16 -
JUnit @Before(@After)사용으로 테스트 코드 중복 제거 및 스프링 테스트 적용
이전 포스팅에 작성했던 테스트 코드를 살펴보자 public class UserDaoTest { @Test public void addAndGet() throws SQLException { ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory.class); UserDao dao = context.getBean("userDao", UserDao.class); dao.deleteAll(); assertThat(dao.getCount(), is(0)); User user = new User(); user.setId("dkwip"); user.setName("test"); user.setPassword("1234"); dao...
2022.01.16