> Java > java지도 시간 > 본문

Spring IOC 컨테이너

大家讲道理
풀어 주다: 2017-08-19 13:46:19
원래의
1419명이 탐색했습니다.

1. Spring Framework 소개

Spring이란?

Spring은 엔터프라이즈급 애플리케이션 개발을 단순화하고 침입을 줄이는 것이 목적인 경량 오픈 소스 애플리케이션 개발 프레임워크입니다.

Spring IOC 및 AOP에서 제공 애플리케이션은 구성 요소의 결합, 즉 분리를 최소화하여 시스템의 향후 유지 관리 및 업그레이드를 용이하게 할 수 있습니다.

Spring은 시스템에 대한 전반적인 솔루션을 제공하며 개발자는 Spring이 자체적으로 제공하는 기능을 사용할 수도 있습니다. -파티 프레임워크 및 기술을 제공하며 개발에 사용할 기술을 자유롭게 선택할 수 있습니다

2. 컨테이너 및 Bean 관리

Spring 컨테이너 소개

Spring에서는 모든 Java 클래스와 JavaBean이 Bean으로 처리됩니다. 이러한 Bean은 컨테이너를 통해 관리되고 적용됩니다.

Spring 컨테이너는 IOC 및 AOP 메커니즘을 구현하여 Bean 객체 생성과 Bean 객체 간의 분리를 단순화할 수 있습니다.

Spring 컨테이너에는 BeanFactory와 ApplicationContext

두 가지 유형이 있습니다. : 간단하고 표준화된 Java 객체; Spring을 사용하는 경우: JavaBean 객체를 관리해야 할 때 사용할 수 있습니다. Spring은 가장 간단한 객체 관리 솔루션 중 하나입니다.

Spring 컨테이너의 인스턴스화

ApplicationContext는 BeanFactory에서 상속됩니다. 인스턴스화 방법은 다음과 같습니다.

//파일 시스템에 구성 파일 인스턴스화 로드

String conf = "C:applicationContext.xml";

ApplicationContext ac = new FileSystemXmlApplicationContext(conf);

//프로젝트 classpath 아래에 구성 파일 인스턴스화 로드

String conf = "applicationContext.xml";

ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

Spring 컨테이너의 사용

본질적으로 BeanFactory와 ApplicationContext는 Bean 정의와 상호 의존성을 유지하는 고급 팩토리 인터페이스일 뿐입니다. BeanFactory 및 ApplicationContext를 통해 Bean 정의에 액세스할 수 있습니다.

먼저 컨테이너 구성 파일 applicationContext에 Bean 정의를 추가합니다. ApplicationContext 컨테이너 객체 다음에 getBean() 메서드를 호출하여 Bean 인스턴스 [getBean("identifier")]

를 얻습니다.

Bean 인스턴스화

Spring 컨테이너에서 Bean 객체를 생성하는 세 가지 방법이 있습니다.

-생성자를 사용하여 인스턴스화합니다. util.GregorianCalendar"/>

(id 또는 name 속성은 Bean 이름을 지정하는 데 사용되며 Bean을 찾는 데 사용됩니다. Spring 클래스의 Bean 객체는 Bean 유형을 지정하는 데 사용되며 매개변수 없는 생성자는 객체를 생성하기 위해 자동으로 호출됩니다.)

-정적 팩토리 메소드를 사용하여 인스턴스화

(id 속성은 Bean 이름을 지정하는 데 사용되며, class 속성은 팩토리 유형을 지정하는 데 사용되며, Factory-method 속성은 - 인스턴스 팩토리 메소드를 사용하여 인스턴스화

< bean id = "calendarObj3" class = "java.util.GregorianCalendar"/>

(id는 Bean 이름을 지정하는 데 사용됩니다. Factory-bean 속성은 팩토리 Bean 객체를 지정하는 데 사용되며, Factory-method 속성은 팩토리에서 Bean 객체를 생성하는 방법을 지정하는 데 사용됩니다.) (Spring에게 객체 생성 규칙을 알려주면 Spring이 생성을 도와줍니다. 구성 및 기본 규칙에 따라 객체 생성, 코드 작성 감소)

Bean 이름 지정

Bean 이름:

Spring 컨테이너에서 각 Bean에는 이름(예: 식별자)이 있어야 합니다. 요소의 id 또는 name 속성을 사용하여 지정할 수 있습니다. id 속성은 이름보다 엄격하고 고유성이 필요하며 "/"와 같은 특수 문자는 허용되지 않습니다.

Bean alias:

은 정의된 Bean이고 다른 이름 참조를 추가하면 를 사용하여

Bean 범위:

Bean을 인스턴스화할 때 Spring 컨테이너는 다음 범위의 Bean 객체를 생성할 수 있습니다.

1. 각 Spring IOC 컨테이너에서 싱글톤 범위


객체 인스턴스. 기본 항목
구성 인스턴스:
또는



2, 프로토타입

A Bean 정의는 여러 객체 인스턴스에 해당합니다
구성 인스턴스:
< ;bean id= "role" class="spring.chapter2.maryGame.Role"scope="prototype"/>
or


3, request
request는 각 HTTP 요청에 대해 새 Bean이 생성되며 해당 Bean은 초기화할 때 요청, 세션 및 전역 세션 내에서만 유효함을 의미합니다. 웹에서는 먼저 웹에서 다음 구성을 만들어야 합니다. ContextListener이면 충분합니다:
...org.springframework.web.context.request.RequestContextListener< /listener-class>...< ;/web-app>

Servlet2.4 이전의 웹 컨테이너인 경우 javax.servlet.Filter 구현을 사용해야 합니다.

< web-app>.. requestContextFilter org.springframework.web.filter.RequestContextFilter < ;filter-mapping>requestContextFilter/*...
그런 다음 Bean의 범위를 구성할 수 있습니다.




4, session


세션 범위는 각 HTTP 요청에 대해 새 Bean이 생성되고 해당 Bean은 현재 HTTP 세션 내에서만 유효함을 의미합니다(HTTPSession에서는 하나의 Bean 정의가 하나의 인스턴스에 해당하며 웹 환경에서만 해당) 구성 인스턴스: 전제는 요청 구성 인스턴스와 동일하며 다음과 같이 웹 시작 파일을 구성합니다. 구성:

5, 글로벌 세션



글로벌 HTTPSession에서 Bean 정의는 인스턴스에 해당하며 이는 포틀릿 기반 웹 애플리케이션에서만 의미가 있습니다. 포틀릿 사양은 글로벌 세션의 개념을 정의합니다.
인스턴스 구성: 인스턴스 구성의 전제는 요청 구성 인스턴스와 동일합니다. 웹 시작 파일을 구성한 후 다음과 같이 구성할 수 있습니다. (위 Bean 범위는 에 정의된 범위 속성을 통해 지정할 수 있습니다.)


Bean 수명 주기 콜백

초기화 콜백 방법 지정:

< ;/bean>

파괴 콜백 메소드를 지정합니다. 싱글톤 모드의 Bean에만 적용 가능합니다. :

최상위 default-init-method 속성은 컨테이너

  에 대한 초기화 콜백 메소드를 지정할 수 있습니다. = " com.foo.ExampleBean"/>

최상위 요소의 default-destroy-method 속성은 모든 < 컨테이너 Method

 

< /beans>

Bean 지연 인스턴스화

ApplicationContext에 구현된 기본 동작은 시작 시 모든 싱글톤 Bean을 미리 인스턴스화하는 것입니다

ApplicationContext가 초기화될 때 싱글톤 Bean이 미리 인스턴스화되는 것을 원하지 않는 경우 요소를 사용할 수 있습니다.lazy-init = "true" 속성이 변경됩니다.

Lazy-Initialized Bean은 처음 사용될 때 인스턴스화됩니다.

최상위 요소의 default-lazy-init 속성은 컨테이너의 모든 에 대해 지연 인스턴스화 기능을 지정할 수 있습니다

빈 종속성 지정

빈이 다른 빈에 종속된 경우 요소의 종속 속성을 사용하여

Bean이 여러 Bean에 종속성을 갖는 경우 종속 속성은 다음을 수행할 수 있습니다. 쉼표로 구분된 여러 Bean 이름 지정

3. 컨테이너 IOC 애플리케이션

IOC Concept

IOC의 정식 명칭은 Inversion of Control이며, 이는 Inversion of Control로 번역됩니다.

IOC는 프로그램에서 객체를 획득하는 방법을 원래의 새로운 방법에서 생성 및 주입하는 방식으로 반전하는 것을 의미합니다. 타사 프레임워크. 타사 프레임워크는 일반적으로 구성을 통해 어떤 특정 구현을 주입할지 지정하여 개체 간의 결합을 줄입니다.

IOC는 다양한 구현 방법에 따라 종속성 주입 DI와 종속성 조회로 나눌 수 있습니다.

Spring 컨테이너는 DI를 사용합니다. 이 메서드는 IOC 제어를 구현합니다. IOC는 Spring 컨테이너의 기초이자 핵심입니다.

DI의 전체 이름은 종속성 주입이며, 이는 종속성 주입으로 번역됩니다. DI의 기본 원칙은 함께 작동하고 관계를 갖는 개체를 구성하는 것입니다. 연결을 설정하기 위해 매개변수 또는 메소드 매개변수가 전달되므로 컨테이너의 작업은 Bean을 생성할 때 해당 종속성을 주입하는 것입니다

IOC는 아이디어이고 DI는 IOC를 구현하는 주요 기술 방법입니다

DI에는 두 가지 주요 주입 방법, 즉 Setter 주입 및 생성자 주입

Setter 주입

매개변수 없는 생성자 또는 매개변수 없는 정적 팩토리 메소드를 호출하여 Bean을 인스턴스화한 후 Bean의 Setter 메소드를 호출하면 Setter 주입을 수행할 수 있습니다

public class JDBCDataSource{ private String 드라이버;

 public void setDriver(String 드라이버){

  try{

   Class.forName(driver);

  this.driver = 드라이버;

  }c catch(예외 e ) {

    throw new RuntimeException(e);

   }

  }

   //기타 코드....

 }

컨테이너 xml 구성, 주입 매개변수 구성

< bean id = "dataSource" 클래스 = "org.dao.JDBCDataSource">

  <속성 이름 = "드라이버" 값 = "oracle.jdbc.OracleDriver"/>

 <속성 이름 = "url" 값 = "jdbc.oracle:thin:@localhost:1521:XE"/>

 <속성 이름 = "user" 값 = "openlab"/>

 <속성 이름 = "pwd" 값 = "open123"/>

생성자 주입

생성자 기반 주입은 매개변수가 있는 생성자를 호출하여 수행됩니다. Bean이 인스턴스화되면 컨테이너는 매개변수 유형에 따라 해당 생성자를 실행합니다.

public class OracleUserDAO는 UserDAO를 구현합니다.

 public OracleUserDAO(JDBCDataSource dataSource){

  this.dataSource = dataSource;

  }

  //다른 코드...

}

생성자 매개변수 인덱스로 주입 지정 <빈 ID = "dataSource" 클래스 = "org.dao.JDBCDataSource">

 <속성 이름 = "드라이버" 값 = "oracle.jdbc.OracleDriver"/>

 <속성 이름 = "url" 값 = "jdbc :oracle:thin:@localhost:1521:XE"/>

 <사용자 이름 = "사용자" 값 = "openlab"/>

 <사용자 이름 = "pwd " 값 = "open123"/> ;

 

Auto-wiring

Spring IOC 컨테이너는 협력하는 Bean 간의 연관을 자동으로 조립(autowire)할 수 있으며 Autowire는 단일 Bean에 대해 설정이 가능합니다. xml

xml 구성 파일에서 요소의 autowire 속성을 사용하여 자동 어셈블리 규칙을 지정할 수 있습니다. 총 5가지 유형의 값이 있습니다

속성 값은 no입니다. 자동 연결을 비활성화합니다. 기본값은

속성 값은 byName:

속성 이름을 기반으로 하는 자동 연결입니다. 이 옵션은 컨테이너를 확인하고 기반 속성과 정확히 동일한 Bean을 찾습니다.

속성 값은 byType:

컨테이너에 지정된 속성과 동일한 유형의 Bean이 있으면 자동으로 속성과 연결됩니다. 속성값은 constructor:byType과 유사하지만 생성자 매개변수에 적용된다는 차이점이 있습니다.

속성값은 autoDetect:Bean 클래스를 통한 자동 조립을 위해 생성자를 사용할지, byType 메서드를 사용할지 결정합니다. 기본 생성자가 발견되면 byType 메소드가 사용됩니다

구성 예:

 

위 구성으로, UserService에 UserDao 유형을 수신하는 Setter 메소드가 있으면 Spring은 자동으로 userDAO 객체를 여기에 주입할 수 있습니다

위 내용은 Spring IOC 컨테이너의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!