Spring
-
JDBC 사용 - 커넥션 풀Spring/Spring 기본 지식 2020. 3. 23. 17:47
DriverManagerDataSource 사용시 문제점 설정 // jdbc 설정하는 xml 인위적인 오류 실행 - jdbc 연결을 인위적으로 많이 발생시킴 ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.postgresql.util.PSQLException: The connection attempt failed.]을(를) 발생시켰습니다. java.net.SocketTimeoutException: connect timed out at java.net.DualStackPlainSocketImpl.waitForConnect(Native..
-
Spring postgresql mybatis jdbc 기본 연결테스트Spring/Spring 기본 지식 2020. 3. 23. 10:51
기본 구조 Junit5 사용하여 연결 테스트 @ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring/PostgreSQL-context.xml"}) public class PostgreSQLConnectionTest { @Autowired private DataSource ds; @Test public void testConnection() throws Exception { try (Connection con = ds.getConnection()) { System.out.println("\nDBConnection 있냐? : " + con + "\n"); } catch (Exception e) { e.printStackTrace(); } ..
-
-
Spring Bean Life CycleSpring/Spring 기본 지식 2020. 3. 15. 21:16
빈 생명주기 메소드 초기화 메소드(initialization method) 초기화 메소드는 빈 오브젝트가 생성되고 DI 작업까지 마친 다음에 실행되는 메소드를 말한다. 오브젝트의 기본적인 초기화 작업은 생성자에서 진행함녀 된다. 하지만 DI를 통해 모든 프로터티가 주입된 후에야 가능한 작업도 있다. 이런경우 사용할 수 있는것이 초기화메소드다. 초기화 콜백 인터페이스 InializingBean 인터페이스를 구현해서 빈을 작성하는 방법이다. InializingBean의 afterPropertiesSet() 메소드는 이름 그대로 프로퍼티 설정까지 마친 뒤에 호출된다. 다른 방법이 더 건결하며, 빈 코프에 스프링 인터페이스를 노출하기 때문에 권장되지 않는다. init-method 지정 XML을 이용하면 bean..
-
DI 방법 3가지Spring/Spring 기본 지식 2020. 3. 12. 23:27
Srping 4.3부터 어떠한 클래스에 생성자가 1개뿐이고, 그 생성자를 주입받는 래퍼런스 변수들이 Bean으로 등록되어있다면 그 빈을 자동으로 주입하도록 되어있다. 스프링에서의 DI방법 3가지 Field Injection @Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Autowired private TestService1 service1; @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) {..
-
스프링 AOP - 토비의 스프링 3.1 6장 끝Spring/Spring AOP 2020. 3. 8. 16:45
스프링 AOP 자동 프록시 생성 중복 문제의 접근 방법 JDK의 다이내믹 프록시는 특정 인터페이스를 구현한 오브젝트에 대해서 프록시 역할을 해주는 클래스를 런타임 시 내부적으로 만들어 준다. 런타임 시에 만들어져 사용되기 때문에 클래스 소스가 따로 남지 않을 뿐이지 타깃 인터페이스의 모든 메소드를 구현하는 클래스가 분명히 만들어진다. 변하지 않는 타깃으로의 위임과 부가기능 적용 여부 판단이라는 부분은 코드 생성기법을 이용하는 다이내믹 프록시 기술에 맡기고, 변하는 부가기능 코드는 별도로 만들어서 다이내믹 프록시 생성 팩토리에 DI로 제공하는 방법을 사용한 것이다. 좀 독특하긴 하지만 변하는 로직과 변하지 않는 기계적인 코드를 잘 분리했다. 의미 있는 부가기능 로직인 트랜잭션 경계설정은 코드로 만들게 하고..
-
스프링의 프록시 팩토리 빈Spring/Spring AOP 2020. 3. 4. 21:53
ProxyFactoryBean 자바에는 JDK에서 제공하는 다이내믹 프록시 외에도 편리하게 프록시를 만들 수 있도록 지원해주는 다양한 기술이 존재한다. 따라서 스프링은 일관된 방법으로 프록시를 만들 수 있게 도와주는 추상 레이어를 제공한다. 생성된 프록시는 스프링의 빈으로 등록돼야 한다. 스프링은 프록시 오브젝트를 생성해주는 기술을 추상화한 팩토리 빈을 제공해준다. 스프링의 ProxyFactoryBean은 프록시를 생성해서 빈 오브젝트로 등록하게 해주는 팩토리 빈이다. ProxyFactoryBean은 순수하게 프록시를 생성하는 작업만을 담당하고 프록시를 통해 제공해줄 부가기능은 별도의 빈에 둘 수 있다. ProxyFactortyyBean이 생성하는 프록시에서 사용할 부가기능은 MethodIntercept..
-
다이나믹 프록시 (4)Spring/Spring AOP 2020. 3. 2. 20:36
다이나믹 프록시를 위한 팩토리 빈 위의 글까지 일게 되면 이제 RansactionHandler와 다이내믹 프록시를 스프링의 DI를 통해 사용하 ㄹ수 있도록 만들어야 할 차례이다. 스프링의 빈은 기본적으로 클래스 이름과 프로퍼티로 정의된다. 스프링은 지정되는 클래스의 이름을 가지고 리플랙션을 이용해서 해당 클래스의 오브젝트를 만든다. 클래스의 이름을 갖고 있다면 다음과 같은 방법으로 새로운 오브젝트를 생성할 수 있다. Class의 newInstance()메소드는 해당 클래스의 파라미터가 없는 생성자를 호출하고, 그 결과 생성되는 오브젝트를 돌려주는 리프렉션 API다. Date now = (Date) Class.forName("java.util.Date").newInstance(); 스프링은 내부적으로 리플..