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 |
댓글