spring 7

[Spring] WebApplicationInitializer

공식 API 문서를 보면 알 수 있듯이 Servlet 3.0 환경의 인터페이스로 기존의 web.xml로 설정하는 것을 프로그래밍으로 설정할 수 있도록 한다. 기존에는 web.xml로 Servlet을 설정 했다면 onStartup 메소드를 오버라이드 해주면서 스프링 설정을 해준다. public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { // Create the 'root' Spring application context AnnotationConfigWebApplicationContext rootContext = new Annot..

Spring 2020.06.14

[Spring] 예제로 보는 Aspect Oriented Programming with Spring

AOP : 관점지향프로그래밍 (aspect- oriented programming) Spring AOP : schema-based approach or @AspectJ 1. AOP Concepts Aspect : before , after , throws , finally 같은 것들을 관리해준다 Transaction management - 실제 비즈니스 로직에서는 트랜잭션 코드를 숨길 수 있다 Join point : Aspect가 동작해야 될 포인트 Advice : Join 포인트가 언제 동작할건지 관리 (before, after , around) pointcut : 조인 포인트를 판단하는것 인데 어떻게 포인트 컷을 걸지 포인트컷 하나에 여러개의 조인 포인트가 생길 수 있다 target object : ..

Spring 2020.06.07

[Spring] 예제로 보는 Environment Abstraction

1. @Profile 어플리케이션 배포할 때 어느 상황에 맞춰서 DB를 붙여야하는데 이럴때 @Profile사용하면 좋다. 보통 @Configuration과 같이쓰인다. @Configuration @Profile("default") public class AppDefaultConfig { @Bean(initMethod = "init", destroyMethod = "destroy") public Connection connection(ConnectionFactory connectionFactory){ return connectionFactory.getConnection(); } } @Configuration @Profile("dev") public class AppDefaultConfig { @Bean(i..

Spring 2020.05.27

[Spring] 예제로 보는 Java-based Container Configuration

1. @Bean(intMethod, destroyMethod) public class A { @Autowired private B b; public A(B b) { this.b = b; } //@PostConstruct void init(){ log.error("A post construct"); } //@PreDestroy void destroy(){ log.error("A post destroy"); } } 기존에 사용하던 @PostConstruct , @PreDestroy 어노테이션을 사용하지 않고 아래의 코드블럭에서 보다시피 외부에서 설정이 가능하다. @Configuration public class AppConfig { @Bean public B b(){ return new B(); } @Bea..

Spring 2020.05.21

[Spring] 예제로 보는 Using JSR 330 Standard Annotations

이 파트에서는 Spring에서 사용하는 것들을 자바 표준 기술로 인터페이스만 추가한 것이다. javax.inject javax.inject 1 Maven을 사용한다면 java.inject를 사용하기 위해 pom.xml에 위와 같이 dependency를 추가해주어야 한다. 1. Limitations of JSR-330 Standard Annotations 위의 표는 Spring에서 사용되는 어노테이션을 자바 표준으로 매칭되는 표이다. 예를 들어 @Component 는 @Named로 대체가능 하지만, 실제로는 자바 표준보다는 Spring의 어노테이션을 사용한다. 굳이 사용한다면 @Inject만 사용하고 웬만하면 Spring 어노테이션을 사용하자.

Spring 2020.05.19

[Spring] 예제로 보는 Classpath Scanning and Managed Components

1. @ComponentScan @Configuration @ComponentScan(basePackages = "패키지명") public class AppConfig { } @Component public class B { } basePackages에 해당하는 패키지 안의 @Component 어노테이션이 붙은 class를 scanning하고 자동으로 Bean으로 등록시킨다. 즉, 위의 클래스B 는 xml에 Bean으로 등록을 안해도 Bean으로 등록시켜준다. (단, AppConfig 이 클래스는 xml에 Bean이라고 등록을 해야한다.) 2. @Repository @Repository public class JpaMovieFinder implements MovieFinder { // implementa..

Spring 2020.05.18

[Spring] 예제로 보는 Bean Scope (Feat. 동일성, 동등성)

예제 코드를 보며 설명하기 전에 우선! 여기서나오는 동일성(identity)과 동등성(equals)의 차이를 알아야한다. 1. 동일성(identity) 객체 주소가 같다. 예) (obj1 == obj2) ---> true @Test public void testIdentity(){ //동일성 테스트 A a1 = new A(); A a2 = new A(); Assert.assertTrue(a1==a2); //결과 : false A a3=a1; //a3는 a1이 가리키는 메모리를 가리키고있다. Assert.assertTrue(a1==a3); //결과 : true } class A{} 2. 동등성(equals) 객체의 값이 같다 예) obj1.equals(obj2) ---> true @Test public v..

Spring 2020.04.29