Java_자바_Spring_스프링_강의_09강_AOP-I
AOP(Aspect Oriented Programming)
스프링만들때 내부적으로는 AOP가 쓰이는데 면접에서는 안묻는다
aop는 방법론
스프링이 도움줌
사용자 --- 주업무로직
(사용자말고 사용자 요구사항말고 사용자요구사항을 수반하기 위해서 코드가 들어가는데 그 코드는 만들다보니 개발자or운영자가 만들다보니까 프로그램구현or테스트하기위해 필요한 코드가 있다는걸 알게됨. 따라서 이건 사용자가 아는 내용이아님. 그냥 개발or운영하기위해 끼워놓게된 부가적인 코드. 주업무(=사용자요구)가아닌 곁다리업무,보조업무(=개발자,운영자요구).
concern
로그처리,보안처리,트랜잭션처리..
주요내용 맨아래,맨위에 빵또아처럼 권한을 준다.(=cross-cutting concern)





[Spring] AOP(관점 지향 프로그래밍)
AOP는 스프링의 가장 중요한 세 가지 특징인 IoC(제어의 역전), DI(의존성 삽입), AOP(관점 지향 프로그래밍)중 하나이다.AOP는 OOP를 대신하는 새로운 개념이 아니라, 기존 OOP를 더욱 보완, 확장하여 OO
velog.io
↑참고주소


관점지향 프로그래밍 - 내부동작으로는 AOP가 적용된다
[LogAdvice.java] package edu.bit.board.aop; public class LogAdvice { public void printLogging() { System.out.println("=========로그기록========"); } }

<!--
Aspect : 공통기능이 들어 있는 클래스(예제, 로깅... 트랜잭션 .. )
Advice : Aspect 클래스에 들어 있는 공통기능(한마디로 Aspcect 안의 함수)
JointPoint : advice 함수가 적용되는 함수
PointCut : Jointpoint의 부분으로 실제로 적용되는 함수내의 지점
weaving: Advice를 적용하는 행위
-->
[aop-context.xml] <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!-- Root Context: defines shared resources visible to all other web components --> <!-- <aop:aspectj-autoproxy></aop:aspectj-autoproxy> --> <bean id="logAop" class="edu.bit.board.aop.LogAop" /> <bean id="logAdvice" class="edu.bit.board.aop.LogAdvice" /> <!-- Aspect : 공통기능이 들어 있는 클래스(예제, 로깅... 트랜잭션 .. ) Advice : Aspect 클래스에 들어 있는 공통기능(한마디로 Aspcect 안의 함수) JointPoint : advice 함수가 적용되는 함수 PointCut : Jointpoint의 부분으로 실제로 적용되는 함수내의 지점 weaving: Advice를 적용하는 행위 --> <!-- AOP설정 --> <aop:config> <aop:aspect ref="logAdvice"> <aop:pointcut id="publicM" expression="within(edu.bit.board.service.*)" /> <!-- <aop:around pointcut-ref="publicM" method="loggerAop" /> --> <aop:before pointcut-ref="publicM" method="printLogging" /> </aop:aspect> </aop:config> <aop:config> <!-- aspect id는 logger이고, logAop를 참조함 --> <aop:aspect ref="logAop"> <!-- pointcut(핵심 기능)의 id는 publicM이고, edu.bit.ex.* 패키지에 있는 모든 클래스에 공통 기능을 적용 --> <aop:pointcut id="publicM" expression="within(edu.bit.board.service.*)" /> <!-- loggerAop()라는 공통 기능을 publicM라는 pointcut에 적용 --> <aop:around pointcut-ref="publicM" method="loggerAop" /> </aop:aspect> </aop:config> </beans>
[web.xml] ... <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring/root-context.xml /WEB-INF/spring/aop-context.xml <!-- ↑이부분 추가. param-value하나 더 만들어서 추가하면XXX --> </param-value> </context-param> ...
[servlet-context.xml] 이부분 지우기! <!-- <!-- 인터셉터 객체 생성 --> <beans:bean id="boardInterceptor" class="edu.bit.board.interceptor.BoardInterceptor"> </beans:bean> Interceptor 설정 <interceptors> <interceptor> <mapping path="/list" /> <exclude-mapping path="/resources/**" /> <beans:ref bean="boardInterceptor" /> </interceptor> </interceptors> -->
조인포인트 - 어드바이스가 적용되는 함수
AOP설정하는 두가지 방법
첫번째방법. xml설정을 통해서 bean을 설정하는방법
두번째방법. 에노테이션 설정
[pom.xml]-이거 두개 넣어놔야 에노테이션 읽을 수 있다. .... <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${org.aspectj-version}</version> </dependency> ....



↑따로 외울필요x 할때마다 그때그때 찾아보는것
파라미터가 있는 메소드는 (*)이렇게 적어주면됨. 없으면()이렇게
프락시.....프락시라는 객체는 눈에 안보임. 다른걸통해서 구현하는데 이게 중간에서 실행시킴
오늘의 문제
1.AOP에 대하여 설명하시오.
2.AOP를 적용하기 위한 두가지 방법은?
(위에 있음)
3.
/10 치면 부서번호 10번에 있는 사람 다 나오게(restful)
부서명(dept)
사원이름(emp)
마이바티스에서 1:N처리 방법
emp(1)와dept(N)에서 세발낙지가 나옴
이거 찾아서 이걸로 처리할것.
collection, resultmap - 이거찾아서 - mapper.xml을 꾸며서
넣기
사진도 랜덤처리로하기
마이바티스에서 1:n 처리 방법(join)
sql문은
select * from emp e, dept d where e.deptno=d.deptno;
이렇게만 처리하고 1:n관계인지 여부는 얘가 알수 없음
우리만 앎
설계랑 sql문은 전혀 관련없어서 1:n관계는 우리가 알아서 만들어줘야한다.
첫번째 방법 조인이고 나발이고 컬럼 전부 다 가져와서 VO에 넣어주기
두번째방법 마이바티스가 공식적으로 제공해주는 assosiation, collection쓰기
'코딩 > 수업 정리' 카테고리의 다른 글
21.02.17 [059] Wed (0) | 2021.02.17 |
---|---|
21.02.16 [058] Tue (0) | 2021.02.16 |
21.02.10 [056] Wed (0) | 2021.02.10 |
21.02.09 [055] Tue (0) | 2021.02.08 |
21.02.08 [054] Mon (0) | 2021.02.08 |
댓글