public class CountingConnectionMaker implements ConnectionMaker{
int counter = 0;
private ConnectionMaker realConnectionMaker;
public CountingConnectionMaker(ConnectionMaker connectionMaker) {
this.realConnectionMaker = connectionMaker;
}
public Connection makeConnection() throws ClassNotFoundException, SQLException {
this.counter++;
return realConnectionMaker.makeConnection();
}
public int getCounter() {
return counter;
}
}
@Configuration
public class CountingDaoFactory {
@Bean
public UserDao userDao() {
return new UserDao(connectionMaker());
}
@Bean
public ConnectionMaker connectionMaker() {
return new CountingConnectionMaker(realConnectionMaker());
}
@Bean
public ConnectionMaker realConnectionMaker() {
return new ImplementsConnectionMaker();
}
}
public class CountingConnectionTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(CountingDaoFactory.class);
ApplicationContext context = new AnnotationConfigApplicationContext(CountingDaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
UserDao dao2 = context.getBean("userDao", UserDao.class);
//DAO사용코드.
User user = dao.get("judah123");
User user2 = dao.get("judah123");
// System.out.println(user);
CountingConnectionMaker ccm = context.getBean("connectionMaker", CountingConnectionMaker.class);
System.out.println(ccm.getCounter());
}
}
@Configuration
?
이 어노테이션은 컨테이너만들 때 참고할 설정정보다 라고 명시해주는 걸로 알고있음.
근데 저 어노테이션 안붙여줘도 Test
에서 user
정보를 잘 갖고오고, (dao == dao2) ? true
인걸로 봐서는 AC
에 등록된 Bean
인 게 확실해보이는데..
왜 @Configuration
를 안붙여주면 count
가 되지 않는 건지?