본문 바로가기
코딩/수업 정리

21.02.15 [057] Mon

by 6^6 2021. 2. 15.
728x90

 

Java_자바_Spring_스프링_강의_09강_AOP-I

 

 

AOP(Aspect Oriented Programming)

스프링만들때 내부적으로는 AOP가 쓰이는데 면접에서는 안묻는다

 

 

aop는 방법론

스프링이 도움줌

사용자 --- 주업무로직

(사용자말고 사용자 요구사항말고 사용자요구사항을 수반하기 위해서 코드가 들어가는데 그 코드는 만들다보니 개발자or운영자가 만들다보니까 프로그램구현or테스트하기위해 필요한 코드가 있다는걸 알게됨. 따라서 이건 사용자가 아는 내용이아님. 그냥 개발or운영하기위해 끼워놓게된 부가적인 코드. 주업무(=사용자요구)가아닌 곁다리업무,보조업무(=개발자,운영자요구).  

concern

로그처리,보안처리,트랜잭션처리..

주요내용 맨아래,맨위에 빵또아처럼 권한을 준다.(=cross-cutting concern)

 

 

 

 

 

 

 

velog.io/@gillog/AOP%EA%B4%80%EC%A0%90-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

 

[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쓰기


 

 

 

 

 

 

 

 

728x90

'코딩 > 수업 정리' 카테고리의 다른 글

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

댓글