설정파일 : xml, java
1.명시적
2.자동적 annotation -> 데이터타입이 일치해야함
이 모든 것을 spring container가 해줌
**Spring AOP

기존 OOP에서는 공통관심사항을 여러 모듈에서 적용하는데 중복된 코드 양산과 같은 한계존재 -> AOP등장
AOP(Aspect Oriented Programming)
--Spring AOP 용어
-
Aspect - 여러 객체에서 공통으로 적용되는 공통관심사항(ex) 트랜잭션, 로깅, 보안) WHAT
-
JoinPoint - Aspect가 적용될 수 있는 지점(ex) 메소드, 필드) WHO
-
Pointcut - 공통관심사항이 적용될 Joinpoint
-
Advice - 어느 시점(ex) 메소드 수행 전/후, 예외발생 후 등)에 어떤 공통 관심기능(Aspect)을 적용할지 정의한 것. WHEN
-
Weaving - 어떤 Advice를 어떤 Pointcut(핵심사항)에 적용시킬 것인지에 대한 설정(Advisor)
Spring AOP 라이브러리 다운(spring aspects 4.3.2다운)
<aop:config>
<aop:aspect id=“logingAspect” ref=“writelog”>
<aop:pointcut id=“publicmethod” expression=“execution(public * public * org.myspring..*.* (..))”/>
<aop:around pointcut-ref=“publicmethod” method=“logging”/>
</aop:aspect>
</aop:config>
<aop:config>
<aop:pointcut expression="execution(public * kosta..*Service.insert(..))" id="servicePointCut"/>
public * (return형) (패키지명) 클래스이름패턴 (메소드)
<aop:aspect id="loggingAspect" ref="logAspect">
<aop:around method="logging" pointcut-ref="servicePointCut"/>
</aop:aspect>
</aop:config>
핵심관심사항 호출시(AOP대상이면)
공통관심사항이 같이 호출됨 proxy가 일련의 행동을 하게 해줌 @autoproxy
WriteService(target객체)
--스프링 MVC
모델2 = MVC패턴(Model-View-Controller) 패턴
장점
-
화면과 비즈니스 로직을 분리해서 작업가능
-
영역별 개발로 인해 확장성이 뛰어남
-
표준화된 코드를 사용하므로 공동작업이 용이하고 유지보수성이 좋음
단점
-
개발과정이 복잡해 초기 개발속도가 늦음
-
초보자가 이해하고 개발하기에 다소 어려움
--Spring MVC

-
Dispatcher Servlet : url의 요청을 받아서 연결시켜준다. (spring에 있는 api, 서블릿 클래스)
-
Handler Mapping(default) : Dispatcher Servlet이 Controller로 매핑하는 방식을 결정
-
Controller : 로직을 처리한다. (=Action)
--action의 역할을 controller가 해줌(DI로 객체생성)
비즈니스실행
경로설정
데이터를 담아갈것인가
-
ModelAndView : view 이름, data를 담는다. (=ActionForward)
-
ViewResolver : view 타입을 정해준다. (internalResolve jsp, files의 definition, types의 view, javaclass의 view)
-
View : 받은 data를 출력한다.
-
요청 처리 순서
-
DispatcherServlet이 요청을 수신
-
단일 front controller servlet
-
요청을 수신하여 처리를 다른 컴포넌트에 위임
-
어느 컨트롤러에 요청을 전송할지 결정
-
DispatcherServlet은 Handler Mapping에 어느컨트롤러를 사용할 것인지 문의
-
URL과 매핑
-
DispatcherServlet은 요청을 컨트롤러에게 전송하고 컨트롤러는 요청을
처리한 후 결과 리턴
-
비즈니스 로직 수행 후 결과 정보(Model)가 생성되어 JSP와 같은 뷰에서 사용됨
-
ModelAndView 오브젝트에 수행결과가 포함되어 DispatcherServlet에 리턴
-
ModelAndView는 실제 JSP정보를 갖고 있지 않으며, ViewResolver가 논리적 이름을 실제 JSP이름으로 변환
-
View는 결과정보를 사용하여 화면을 표현함
config->convertto war. finish
build다음에
<dependencies>써주기
spring mvc 5번째 spring web mvc 4.3.2
**controller method

@RequestMapping("/hello.do")
public ModelAndView hello(){
ModelAndView mav = new ModelAndView();
mav.setViewName("hello");
mav.addObject("message",service.getMessage());
return mav;
}
}
=>string타입
@RequestMapping("/hello.do")
public String hello(Model model){
model.addAttribute("message", service.getMessage());
return "hello";
}
}
**spring잘하는방법
view와 controller사이를 잘 컨트롤해주면 됨
-
view에서 controller로 command object로 전달
-
controller에서 view로 ModelAndView전달, string (Model)전달
@Controller
public class BoardController {
public BoardController(){}
@RequestMapping(value="/board_insert", method=RequestMethod.GET)
public String insertForm(){
return "insert_form";
}
@RequestMapping(value="/board_insert", method=RequestMethod.POST)
public String board_insert(Board board){
System.out.println(board);
return "";
}
}
**spring mvc

-
viewResolver = view의 종류를 결정해줌
-spring(legacy) - RESETful방식, json형식,
'FULLSTACK > SPRING' 카테고리의 다른 글
12/7~8 Spring Boot, JPA (0) | 2020.12.08 |
---|---|
STS기반 SPRING - 구멍가게코딩단 책과 함께합니다 (0) | 2020.11.13 |
SPRING 4차시 - AOP, TRANSACTION, FILE UP/DOWN (0) | 2020.11.13 |
SPRING 3차시 - DB연결, RESTful방식 (0) | 2020.11.13 |
SPRING 1차시 - Dependency Injection (0) | 2020.11.13 |