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
728x90

1. 블루투스 장치목록 가져오기, 장치 연결/해제 이벤트 받기

https://blog.naver.com/awesomedev/220679754787

 

2. Android — BLE 통신 예제(1)

 

https://medium.com/@lyoungh2570/android-ble-%ED%86%B5%EC%8B%A0-%EC%98%88%EC%A0%9C-%EB%B6%84%EC%84%9D-8d01507a1177

728x90
728x90

해당 문서는 아래의 강의를 정리 및 요약한 문서입니다.

자세한 사항은 강의를 참조하시기 바랍니다.

https://www.youtube.com/playlist?list=PLPvokKzUkaLeiLUDKpqRdP8jtLU8lLKgR

 

 

7. 생명주기

 - 객체를 만들때 생성자에 직접 넣을 수도 있지만, 별도로 load 메소드로 설정하는 방법도 존재

 - 생성자에 직접 넣을 경우는 생성과 동시에 설정이 되지만, load 메소드로 설정하면 refresh도 같이 해줘야 설정이 완료됨

 

 

- bean 객체의 생성주기에 따른 메소드를 만드는 방법은 2가지가 있는데,

1) bean class에 implements로 InitializingBean(초기화 과정)과 DisposableBean(소멸 과정)을 상속해서 구현하는 방법

2) @PostConstruct(초기화 과정), @PreDestroy(소멸과정) 에 해당하는 annotation을 이용하여 구현하는 방법이 있음. 

 

 

 

 

- Spring을 사용하게 되면, 컨테이너에서 생성한 객체를 바라본다. 즉, 의존하는 클래스에서 객체의 이름을 달리해서 여러개를 만들어도 같은 것이 되는 것. (화면상의 예제에서 student1과 student2는 다르다고 생각하지만, 스프링 기법으로 이미 객체를 생성놓고 바라보는 것이기 때문에 사실상 같은 객체인 것)

- scope를 지정하지 않았을시, 즉 default일경우 scope은 singleton이 됨

 

 

 

8. 외부파일을 이용한 설정

- Environment 객체

- property 프로퍼티 파일을 이용한 설정

- profile 프로파일 속성을 이용한 설정

 

 - Context 파일을 만듦

 - Environment 객체 안에 여러가지 정보가 있을 수 있음. (ex. DB ID, DB Paswword, IP 주소 등에 대한 설정값)

 - 이와 같은 값을 관리하기 위해, Environment 객체 안에 해당 정보가 있는 것이 아니라, property Sources에 위치함. 

 

 

 

 

Property 사용방법 또한 2가지 (xml파일 사용, java 파일 사용)이다.

(1) xml파일 사용의 경우

applicationCTX.xml에서

상위에 xmlns:context="http://www.springframework.org/schema/context"를 추가하고,

<context:property-placeholder location = "path1, path2"/>로 불러오는 외부파일에 대해 설정함

 

(매번 기억하기 힘들기 때문에, 하단 tab에 namespace로 가서 설정하면 쉬움)

 <value>에 ${해당데이터key} 방법으로 입력함

 

(2) java파일 사용의 경우

ApplicationConfig.java 에서

 

package com.javalec.ex;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

@Configuration
public class ApplicationConfig {


//@Value annotation을 사용하면 field에 바로 적용이 되기 때문에 따로 setter 설정을 하지 않아도 됨
	@Value("${admin.id}")
	private String adminId;
	@Value("${admin.pw}")
	private String adminPw;
	@Value("${sub_admin.id}")
	private String sub_adminId;
	@Value("${sub_admin.pw}")
	private String sub_adminPw;
	
	@Bean
	public static PropertySourcesPlaceholderConfigurer Properties() {
		PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
		
		Resource[] locations = new Resource[2];
		locations[0] = new ClassPathResource("admin.properties");
		locations[1] = new ClassPathResource("sub_admin.properties");
		configurer.setLocations(locations);
		
		return configurer;
	}
	
	@Bean
	public AdminConnection adminConfig() {
		AdminConnection adminConnection = new AdminConnection();
		adminConnection.setAdminId(adminId);
		adminConnection.setAdminPw(adminPw);
		adminConnection.setSub_adminId(sub_adminId);
		adminConnection.setSub_adminPw(sub_adminPw);
		return adminConnection;
	}
	
}

 

Profile 사용방법 또한 2가지 (xml파일 사용, java 파일 사용)이다.

이와 같은 설정이 필요한 이유는 실서버와 테스트서버로 각기 다른 환경을 간단하게 탈부착하듯 설정할 수 있게 하기 위해서임.

 

 

728x90
728x90

 

해당 문서는 아래의 강의를 정리 및 요약한 문서입니다.

자세한 사항은 강의를 참조하시기 바랍니다.

https://www.youtube.com/playlist?list=PLPvokKzUkaLeiLUDKpqRdP8jtLU8lLKgR

 

 

1. 스프링 프로젝트 생성하기 (정말 기본 프로젝트만 만들기)

 

2. DI(Dependency Injection, 의존성 주입) & IOC 컨테이너

 

Q. 의존한다? => 위의 MainClass 클래스는 사칙연산을 수행하기 위해서 Calculation 클래스의 기능을 사용하기 때문에, MainClass는 Calculation 클래스를 의존한다고 볼 수 있다.

 

이와 같이 객체를 생성해서 의존할 때, 2가지 방식이 존재하는데,

1) 의존하는 A객체가 의존하려는 객체 B, C를 직접 생성하는 방법

2) 객체 B, C를 외부에서 생성해서(setter()와 construct()를 이용해서) A객체에게 주입하는 방법이다.

 

개발론적으로 보면 방법2가 더 좋은 방법이며, 스프링이 채택하고 있는 방식임.

 

 

 

A객체에 주입하려는 개별 객체를 부품이라고 볼 수 있다. 이 부품들을 담고 있는 것을 IOC 컨테이너라고 한다.

 

 

3. DI - 스프링을 이용한 객체 생성과 조립

 

property: 해당 클래스 객체가 가지고 있는 필드에 대한 설정

ref bean: 참조하는 객체의 타입 설정

 

 

 

==> 의존성 주입을 위한 bean configuration file 생성 방법. (물론 파일명은 자유롭게 해도됨)

 

 

4. DI - configuration 파일의 property 설정 방법 및 컨테이너 이해

 

 

5. DI 의존관계

6. DI 설정 방법

1) XML파일을 이용한 설정방법

2) JAVA파일을 이용한 설정 방법 (강사분 말로는 그다지 많이 사용하지는 않는다는듯...했으나 STS4부터는 xml 로 컨테이너 만들 수 없음. 강사님이 말씀하시는 많이 안쓸거 같다던 java 기반으로 컨테이너 만드는것만 지원함.)

 

3) XML+JAVA 파일 이용한 설정방법

 

 

   <constructor-arg>는 옆에서 보듯, Student객체의 생성자에서 설정하는 데이터를 뜻함

constructor-arg를 간편하게 쓸 경우 "c:" = c네임스페이스

property를 간편하게 쓸 경우 "p:" = p네임스페이스

네임스페이스를 쓸 경우에는, xmlns:c = "http://www.springframework.org/schema/c" 처럼 네임스페이스를 bean configuration file에서 쓰겠다고 명시하며 추가해야함

 

 

1) xml에 java를 삽입하는 방법

- xml에 java configuration파일을 사용할 때는, bean 생성 코드 바로 위에 <context:annotation-config>를 설정해줘야함

 

 

2) java에 xml을 삽입하는 방법

- java파일의 @Configuration 아래에  @importResource("경로")로 추가

 

 

 

728x90

+ Recent posts