728x90

 

1. Controller 여러개 사용하기

 

만약 com.template.board.controller라는 프로젝트 경로에

 

com.template.board.controller.MainController1

com.template.board.controller.MainController2

 

가 있다고 가정할 경우, 둘 다 사용하기 위해서는 다음과 같이 수정해야함

 

 

1) component-scan 부분

 

<context:component-scan base-package="com.template.board.*" />

별표로 표시하면 그 이하 패키지는 모두 스캔됨

스캔 한번만 해주면 되므로 web.xml  서블릿에서 하는 방법으로 일일이 url 을 맵핑해 줄 필요 없음

 

다시 예를 들면
<context:component-scan base-package="com.*" />

로 하면 com 패키지 이하는 모두 스캔이 됨.

 

*****주의할 점은

 <context:component-scan base-package="com.template.board.controller" />

상위 부모가 아니라, 직접 해당 경로를 지정하면 하나 이상 선언이 불가능함.

 

 

2) Controller 클래스 부분에 직접 @RequestMapping 적용

 

@Controller

@RequestMapping(value="/member")

public class MemberController {

}

 

 

 

 

2. 단일 메소드를 여러 이름으로 접근하여 처리할 경우

=> value 값을 배열{}로 주어 처리

@RequestMapping(value = { "/userList", "/userList2" })

 

 

 

 

 

Reference

https://yangyag.tistory.com/211

https://okky.kr/article/393298

728x90
728x90

 

 

- DispatcherServlet: client의 요청을 최초로 받아서 다른 곳들에 넘기도록 처리함. 중요하지만, 실제로 많이 다루지는 않음.

 

- Model, View, Controller 정도를 많이 다룸 (MVC)

- 나머지 부분(HandlerMApping, HandlerAdapter)은 스프링 프레임워크에서 자동으로 다뤄짐

 

 

 

 

 

 

 

src/main/webapp은 web의 root라고 보면 됨.

 

 

 

 

<resources mapping=/resources/**" location="/resources/"/>는

servlet이 해당 경로는 가로채지 않도록 예외시키는 것

 

<resources mapping=/MyResources/**" location="/MyResources/"/>라고 만들면 해당 폴더도 가로채지 않음

 

 

 

12. 컨트롤러(Controller)

 

13. Form 데이터

 

 

728x90
728x90

1, Spring 소개

 

https://www.youtube.com/watch?v=XtXHIDnzS9c&list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T&index=1

 

 

2. 느슨한 결합력과 인터페이스

 

 

3. DI(Dependency Injection)

 

4. IoC(Inversion Of Control) 컨테이너

 

 

결합력이 강한 경우에는 A가 만들어지면 B가 만들어지고 C,D까지 만들어지는 순서임. 

그러나 이와 달리 역순으로 D부터 A까지 객체를 만든 후에 조립되는 컨테이너라는 의미로 IoC Container라고 함.

 

 

5. Dependency를 직접 

 

7. 스프링 DI 지시서 작성하기(Spring Bean Configuration)

 

8. 스프링 IoC 컨테이너 사용하기(ApplicationContext 이용하기)

 

종류가 여러개인 이유는, 지시서(config파일)의 위치를 어떻게 알려주느냐에 따라서 달라짐

1) 어플리케이션의 root에서부터 경로를 알려줄때는 classPathXml~.

2) C드라이브(파일시스템)의 어느 경로에 있다고 알려줄때는 FileSystemXml~.

3) config 파일을 웹의 경로에 두고 있다고 URL로 알려줄 때는 XmlWeb~.

4) Annotation을 이용할 경우에는 AnnotationConfig~.

 

 

 

+Java Project일 때 Maven Project로 바꾸고 싶을 경우

 

11. 콜렉션 생성과 목록DI

 

방법1

 

 

방법2

 

 

12. 어노테이션을 이용할 때의 장점과 @Autowired를 이용한 DI 해보기

 

초기에 xml로 설정을 할 때, 코드를 건드리지 않고, xml만으로 객체를 B2에서 B3로 바꿀 수 있다는 것 자체만으로도 좋았지만, 나중에는 이 변경에 따른 것 마저 자동으로 바뀌었으면 하고 바라게 됨.

따라서 설정하는 코드에 annotation을 붙여서 바뀌도록 하게함.

즉, xml 방식은 설정을 코드와 분리하는 방식

annotation 방식은 설정을 코드와 같이 가져가는 방식

 

 

이전에 xml방식에서 property로 설정해서 injection하던 방식 ==> annotation에서는 @Autowired로 대체 가능

 

 

13. @Autowired의 동작방식 이해와 @Qualifier 사용하기

 

같은 클래스의 객체가 두개 이상일 경우는 @Autowired로 자동매칭이 되지 않음 (어떤 객체를 해야할지가 문제가 되기 때문). setter에 있는 객체명 파라미터와 같으면 자동매칭 되긴함. 하지만 이보다는 직접적으로 객체의 id를 통해 '이 객체와 연결하라'고 매칭해주는 것이 좋음. 이 때 쓰는 annotation이 @Qualifier임. 

 

 

14. @Autowired의 위치와 required 옵션

 

@Autowired는 setter위에도 사용 가능하고.

 

 

 

@Autowired는 기본 객체 생성자 위에도 사용 가능하고

 

 

@Autowired는 overload 생성자 위에서도 사용 가능함

 

 

이럴경우 overload 생성자는 있는데, 기본생성자가 없기 때문에 에러가 발생함

단, overload생성자도 없으면 에러 미발생

 

 

overload 생성자에 붙일 경우, 그냥 붙이면 에러가 발생할 수 있는데, 이유는 overload 생성자에서는 입력하려는 동일유형 객체가 여러개일 수 있기 때문. 따라서 파라미터 자리별로 @Qualifier로 지정할 수 있음.

 

 

만약, @Autowired로 자동으로 객체를 연동하게끔 코드가 작성되어 있어도, 객체를 생성하지 않을 수 있음. 이런 상황에서도 소스가 null인 상태로라도 작동이 되게끔 구현하고 싶다면, 다음과 같이 @Autowired(required = false)를 지정하면 됨

 

https://www.youtube.com/watch?v=MlTk1AFMIzU&list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T&index=14

728x90
728x90

 

https://www.youtube.com/watch?v=2F8K9BLgvjE&list=PLPvokKzUkaLeiLUDKpqRdP8jtLU8lLKgR&index=9

 

신입SW인력을 위한 실전 자바(Java) 스프링(Spring) 동영상과정 제 09강 AOP-I

신입SW인력을 위한 실전 자바(Java) 스프링(Spring) 동영상과정 제 09강 AOP-I 이번 강의는 AOP-I편입니다. PC로 보실때는 서울산업진흥원( http://www.sba.kr )에서 제작한 유튜브 동영상( http://www.youtube.com/seouliotcenter ) 에서 HD 동영상을 보시는 것이 좋습니다. 1080p로 설정해서 보시면 글자가 잘 보입니다. 오른쪽 하단 톱니모양에서 1080p를 선택하세요. 그리고 모바일로

www.youtube.com

 

https://wizcenter.tistory.com/239

 

9. AOP(Aspect Oriented Programming)-I: 관점지향 프로그래밍

공통 기능을 모든 모듈에 적용하기 위한 방법으로 상속을 통한 방법이 존재.

==> 상속의 문제점

 1) 우선 JAVA에서는 다중 상속이 불가하므로 다양한 모듈에 상속기법을 통한 공통 기능 부여는 한계가 있습니다.

 2) 기능 구현부분에 핵심 기능 코드와 공통 기능 코드가 섞여 있어 효율성이 떨어집니다.

 

==> 위의 상속을 통한 방법에 한계 개선으로 AOP 등장

AOP방법은

1) 핵심 기능과 공통 기능을 분리 시켜놓고,

2) 공통 기능을 필요로 하는 핵심 기능들에서 사용하는 방식 입니다.

 

 

ex) 아침에 밥을 짓는다고 생각해 봅니다.

핵심 기능은 쌀을 씻고, 깨끗한 물을 적당히 넣고, 전자밥솥에 내솥을 넣고, 취사 버튼을 누르는 기능들 일 것입니다

공통 기능은 수도 꼭지를 열어 물을 받고, 쌀이 깨끗이 씻겼는지 눈으로 판단하고, 물을 적당한지 판단하는 기능들 일 것입니다.

이러한 기능이 공통 기능인 것은 밥을 짓는 행동이 아닐 때도 우리는 수도 꼭지를 열고, 눈으로 사물을 보고 적절한 판단을 하기 때문에 공통 기능이라고 하였습니다.

어쨌든, 이렇게 핵심 기능과 공통 기능을 분리해 놓고, 추후에 밥을 짓는 행동 말고 팥을 쑬 때도 핵심 기능은 변화지만, 공통 기능은 다시 적용할 수 있을 것입니다.

 

 

 

AOP 관련 용어

 - Aspect : 공통 기능

 - Advice : Aspect의 기능 자체

 - Jointpoint : Advice를 적용해야 되는 부분( ex, 필드, 메소드 ) (스프링에서는 메소드만 해당)

 - Pointcut : Jointpoint의 부분으로 실제로 Advice가 적용된 부분

 - Weaving : Advice를 핵심 기능에 적용 하는 행위

 

...

 

JoinPoint는 핵심기능 메소드를 의미함

 

 

 

- XML 기반의 AOP구현 작업 순서 (spring_9_2_ex1_springex)

 1) 존 설정(pom.xml)

 2) 공통 기능의 클래스 제작 – Advice 역할 클래스

 3) XML설정 파일에 Aspect 설정

 

- Advice의 종류

<aop:before> : 메소드 실행 전에 advice실행

<aop:after-returning> : 정상적으로 메소드 실행 후에 advice실행

<aop:after-throwing> : 메소드 실행중 exception 발생시 advice실행

<aop:after> : 메소드 실행중 exception 이 발생하여도 advice실행

<aop:around> : 메서드 실행 전/ exception 발생시 advice실행

 

 

728x90

+ Recent posts