Spring은 주로 IOC (Control Version)와 AOP (단면 지향 프로그래밍)라는 두 가지를 구현하는 오픈 소스 프레임 워크입니다.
IOC
의존성 반전이라고도하는 제어 역전.
소위 의존성은 프로그램의 관점에서, 예를 들어, A가 B의 방법을 호출하려는 경우, A는 B에 의존한다는 것을 의미합니다. 어쨌든 A는 B를 사용하려면 B에 의존한다면 A는 B에 의존한다면, 소위 반전에 의존한다면, 소위 반전이되면 BB (BB) (b : b : b : b : b : b : b) B 인스턴스를 얻으려면 (물론, 공장, 로케이터 등과 같은 B 인스턴스를 얻는 데 도움이되는 다양한 설계 패턴이 있습니다), B 객체를 호출 할 수 있습니다. 그러므로 반전되지 않으면 B를 사용하기 전에 A가 적극적으로 b를 얻어야한다는 것을 의미한다. 이 시점에서 거꾸로 된의 의미를 이해해야합니다. 반전은 A가 B 호출을 원한다면 A는 B를 적극적으로 얻을 필요가 없지만 다른 사람들은 자동으로 B를 문으로 전달할 것임을 의미합니다.
소위 제어 역전은 제어력의 전달입니다. 예를 들어 : 사람이 운전하고 싶어한다면, 정상적인 상황에서 사람은 혼자서 차를 찾아야합니다. 제어 역전이 달성 된 후에는 자동차의 위치를 고려하고 직접 운전하며 사람이 자동차 제어를 다른 물체로 전송할 필요가 없습니다. 다음 코드를 경험하십시오
인터페이스 차량을 정의합니다
공개 인터페이스 카 {void go ();}두 가지 유형의 자동차를 정의하십시오
공개 클래스 벤츠는 {public void go () {System.out.println ( "Benz Go ...")을 구현합니다. }} public class bmw는 Car {public void go () {System.out.println ( "bmw go ..."); }}아래는 운전입니다
공개 클래스 사람 {Car Car = New Benz (); void drivecar () {System.out.println ( "시작 시작"); 뱃짐(); }}이것은 일반적인 코드 제어 프로세스입니다. 운전하고 싶다면 혼자서 차를 인스턴스화해야합니다. 그러나이 경우이 사람은 한 대의 차만 운전할 수 있습니다. 이 사람은 어떻게 다양한 자동차를 운전할 수 있습니까? 제어 역전을 달성하는 것입니다. 다시 말해서, 사람이 더 이상 차를 스스로 인스턴스화하지 않으면, 그 사람은 어떻게 자동차의 대상을 얻을 수 있습니까? 우리는 의존성 주입 (짧은 경우)을 사용하여 자동차의 대상을 얻으려면 제어 역전을 달성 할 수 있습니다. 따라서 개인 수업을 수정해야합니다
공개 계급 사람 {자동차 자동차 = null; 공공 사람 (자동차 차량) {this.car = 자동차; } void driveCar () {System.out.println ( "시작 시작"); 뱃짐(); }}현재 사람 클래스는 더 이상 자동차의 객체 자체를 인스턴스화하지 않지만 생성자를 사용하여 자동차의 객체를 얻습니다. 따라서이 클래스는 자동차가 자동차 인터페이스를 구현하는 한 다양한 자동차를 운전할 수 있습니다. 사람 수업을 사용하는 방법을보십시오
public static void main (String [] args) {person p = new Person (new benz ()); p.drevecar ();}Person Class는 생성자를 통해 전달하는 한 두 가지 이상의 자동차를 운전할 수 있습니다. 이 예에서 자동차 객체는 사람 클래스의 종속성입니다. 우리가 사람 클래스를 인스턴스화 할 때, 자동차의 인스턴스를 사람 클래스에 전달하는 것은 종속성 주입입니다. 따라서 우리의 수업은 따라서 통제 역전을 구현합니다.
제어 역전은 정확히 무엇을 반전합니까? 소위 제어 역전은 물체 의존성을 얻는 과정입니다. 제어 권한이 역전 된 후, 종속 객체를 얻는 프로세스는 자체 관리에서 IOC 컨테이너에 의한 주입으로 변경됩니다.
스프링은 의존성 주입을 구현합니다
위의 코드 라인에서 Person P = New Person (New Benz ()); 스프링은 당신의 코드 라인이 특정 벤츠 클래스를 인스턴스화한다고 느끼기 때문에 봄은 이렇게하지 않습니다. 앞으로 BMW 클래스를 인스턴스화하려면 코드를 수정할 필요가 없습니까? 그런 다음 구성 파일로 작성하겠습니다. 앞으로주의를 기울여야하더라도 적어도 코드를 수정할 필요가 없으므로 다음 구성을 사용할 수 있습니다.
<beans> <bean id = "car" /> <bean id = "person"> <property name = "car"ref = "car" /> <bean /> < /beans>
그런 다음 Spring은 몇 가지 메커니즘을 제공합니다. 구성 파일에서 Person Class 객체를 얻을 때, 들어오는 자동차 객체가 조립되고 Person Object는 어떤 특정 클래스가 전달되는지 걱정할 필요가 없습니다. 따라서 Spring, IOC 프레임 워크로서 주로 객체 생성과 객체 간의 관계를 조립하는 두 단계를 취합니다.
AOP
AOP (Aspect Oriented Programming)는 Aspect-Oriented 프로그래밍입니다. 어떤 측면이 무엇인지에 대한 예를 들어 드리겠습니다. 완전한 웹 사이트 프로젝트에서 많은 모듈을 기록해야하고 많은 장소를 로그인해야하며 많은 장소는 예외 처리해야합니다. 로깅, 로깅, 예외 처리 및 기타 논리는 소위 섹션입니다. 이 섹션의 논리를 어디에나 쓰고 있다고 가정하면, 코드의 유지 관리 가능성을 상상할 수 있습니다. AOP는 문제의 분리를 달성하고,이 섹션의 논리를 추출한 다음 별도의 클래스로 작성한 다음 일반 모듈로 조립할 수있는 방법을 찾아야합니다. 일반 모듈은 섹션과 섹션으로 조립했다는 것을 알지 못합니다.
측면 지향 프로그래밍의 목표는 초점을 분리하는 것입니다. 초점은 무엇입니까? 그것은 당신이해야 할 일입니다. 초점입니다. 당신이 젊은이이고 인생 목표가 없다면, 옷을 입고 먹으면 하루 종일 한 가지만 알고 있습니다! 따라서 매일 눈을 뜨면 저녁 식사 후 놀러 가고 싶지만 (해야 할 일), 연주하기 전에 옷을 입고 신발을 착용하고 퀼트를 접고 요리 등이 필요합니다.이 물건은 초점이지만, 먹고 놀아야하므로 어떻게해야합니까? 이 모든 것들은 다른 사람들에게 맡겨집니다. 식탁으로 걸어 가기 전에, 옷을 입는 데 도움이되는 특별한 하인 A, 하인 B가 신발, 종 C, 퀼트를 접는 데 도움이되는 하인 C, 요리를 도와주고, 먹고 놀기 시작합니다 (오늘은 사업입니다). 하루를 마치면 돌아와서 일련의 하인 들이이 일을 도와주기 시작하면 하루가 끝났습니다!
AOP의 장점은 중요한 사업 만하면 다른 일을 도와 줄뿐입니다. 어쩌면 언젠가는 알몸으로 달려 가고 옷을 입고 싶지 않다면 종을 해고합니다! 어쩌면 언젠가 외출하기 전에 돈을 가져오고 싶을 수도 있습니다. 그래서 당신은 다른 종 D를 고용하여 돈을 벌 수 있도록 도와 줄 수 있습니다! 이것은 AOP입니다. 모든 사람은 자신의 의무를 수행하고 유연하게 결합하여 구성 가능한 플러그 가능한 프로그램 구조를 달성합니다.
Spring의 관점에서 볼 때 AOP의 가장 큰 목적은 거래 관리 기능을 제공하는 것입니다. 거래 관리는 초점입니다. 귀하의 비즈니스는 데이터베이스에 액세스하는 것이며 거래를 관리하고 싶지 않습니다 (너무 성가신). 따라서 Spring은 데이터베이스에 액세스하기 전에 자동으로 트랜잭션을 시작하며 데이터베이스에 액세스 한 후 트랜잭션을 자동으로 커밋/롤백합니다!
다음 코드를보십시오. 이해하지 못하더라도 중요하지 않습니다.
<bean id = "Audience" /> <aop : config> <aop : 측면 ref = "Audience"> <aop : pointcut id = "performance"expression = "execution (* com.springInaction.springidol.performer.perform ())") ")") ")"). <aop : pointcut-Ref = "Performance"method = "turnoffCellphones" /> <!-<co id = "co_refpointcut" />-> <aop : after returning pointcut-ref = "performance"method = "baptaw" /<!-<co id = "co_refpointcut" />-> <aop : <aop : <aop : <aop : " Method = "demandrefund"/> <!-<co id = "co_refpointcut"/>-> </aop : 측면> </aop : config>
위의 구성의 대략 의미는 Performer.porform 메소드가 발생하려고 할 때 스프링 프레임 워크의 프록시가 대상 메소드 (Performer.perform ())를 가로 채는 것입니다. 대상 방법을 실행하기 전에 먼저 Audience.takeseats () 및 AudienCeturn.offcellphones () 메소드를 실행 한 다음 대상 메소드를 실행하십시오. 대상 방법이 실행되고 반환되면 AudienCeturn.applaud () 메소드를 실행하십시오. 대상 방법이 불행히도 예외를 던지면 에이전트는 audienceturn.demandrefund () 메소드를 실행합니다. 요컨대, Spring의 프록시 클래스는 모든 측면에서 대상 방법의 실행을 모니터링하는 반면, 대상 방법은 자체 업무에만 초점을 맞추고 프록시 클래스의 존재를 알지 못합니다.
요약
위의 것은 Spring의 IOC, AOP 및 코드 예제에 대한 간단한 이해에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구들은이 사이트를 계속 참조 할 수 있습니다.
Spring의 IOC 시뮬레이션 구현에 대한 자세한 소개
스프링 AOP 인터셉트-자동 프록시 세부 설명을 구현하는 3 가지 방법
단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!