1 기본 스프링 기능
Spring은 매우 활발한 오픈 소스 프레임 워크입니다. 핵심을 기반으로 다층 Javaee 시스템을 구축하는 프레임 워크이며 주요 목적은 엔터프라이즈 개발을 단순화하는 것입니다.
Spring은 비 침습적 방식으로 코드를 관리합니다. 봄은 "최소 침입"을지지합니다. 즉, 적절한 시간에 봄을 설치하거나 제거 할 수 있으며 봄은 Java를 밝게 만듭니다. (Open and Closure Principle), 여기에 마감 원리가 있습니다.
2. 스프링을 개발하는 데 필요한 도구
(여기서 우리는 먼저 스프링 2.5와 3.0을 선택합니다)
2.1 Spring 's Jar 패키지
http://www.springsource.org/download에서 Spring을 다운로드 한 다음 Decompress, Decompression 디렉토리에서 다음 JAR 파일을 찾아 ClassPath에 복사하십시오.
- 스프링의 핵심 클래스 라이브러리는 Dist/Spring.jar 아래에서 스프링 문서입니다.
-소개 된 타사 도서관은 Lib, Lib/Jakarta-Commons/Commons-Logging.jar의 모든 스프링 문서입니다.
-AP (Aspect Programming)가 사용되는 경우 다음 JAR 파일 Lib/Analsjweaver.jar 및 Sagnert.jarlib/cglib/cglib-nodep-2.1_3.jar도 필요합니다.
-@resource/@postconstruct/@predestroy와 같은 JSR-250의 주석을 사용하는 경우 다음 JAR 파일 LIB/J2EE/Common-Nannotations.jar도 필요합니다.
참고 : JSR (Java Specification Request)은 JCP (Java Community Process)에 표준화 된 기술 사양을 추가하라는 공식적인 요청을 말합니다. 누구나 JSR (Java Specification Request)을 제출하여 Java 플랫폼에 새로운 API 및 서비스를 추가 할 수 있습니다. JSR은 Java 세계에서 중요한 표준이되었습니다.
2.2 스프링 구성 파일
기본적으로 ApplicationContext.xml 파일입니다. 많은 XML 파일을 만들 수 있으며 이는 일반적으로 프로젝트에서 구성됩니다. (SRC 디렉토리에서 생성)
3 스프링의 기본 기능에 대한 자세한 설명
3.1 Springioc
Spring 's Control 반전 : 생성, 초기화, 파괴 및 기타 물체 작업을 스프링 컨테이너로 넘겨주십시오. 스프링 컨테이너로 물체의 수명주기를 제어합니다.
단계:
•에이. 스프링 컨테이너를 시작하십시오
1. 클래스 경로에서 구성 파일을 찾으려면 컨테이너를 인스턴스화합니다.
코드 사본은 다음과 같습니다. ApplicationContext CTX = new ClassPathXmlApplicationContext (새 String [] { "ApplicationContext.xml"});
전체 클래스 경로에서 XML 파일을 찾을 수 있습니다.
*이 방법으로로드하십시오. 스프링 구성 파일을 현재 프로젝트의 클래스 경로 아래에 넣어야합니다.
* ClassPath Path는 Java 소스 파일의 저장 위치 인 현재 프로젝트의 SRC 디렉토리를 말합니다.
2. 파일 시스템 경로에서 구성 파일 찾기 컨테이너를 인스턴스화합니다.
Spring의 구성 파일은 여러 구성 파일을 지정할 수 있으며 문자열 배열을 통해 전달할 수 있습니다.
참고 : 첫 번째 방법을 사용하여 컨테이너를 자주 시작하십시오.
•비. 스프링 컨테이너에서 물체를 추출합니다
스프링 컨테이너 구조 :
3.2 별칭
<beans> <alias name = "person"alias = "p"// alias는 별칭입니다. P를 통해 사람 Bean을 얻을 수 있습니다. <bean name = "person"/> </beans>
이러한 구성을 사용하면 한 곳에서 이름 지정 및 여러 장소에서 다른 이름을 사용하는 효과가 달성 될 수 있습니다.
3.3 스프링 컨테이너 내부 물체
1 객체를 만드는 방법
1.1 매개 변수 생성자가 없습니다
<bean id = "helloorld"> </bean>
1.2 정적 공장 방법
<bean id = "helloorld2"
Factory-Method = "GetInstance"> </bean>
1.3 예제 공장 방법
<bean id = "helloworldfactory"> </bean>
<bean id = "helloworld3"factory-bean = "helloworldfactory"factory-method = "getinstance"> </bean>
개념을 기억하십시오. 첫 번째 방법은 가장 많이 사용되지만 다른 도구와 통합 할 때 인스턴스 팩토리 모델이 사용됩니다.
예 :
ApplicationContext.xml을 구성하십시오
<? xml 버전 = "1.0"alcoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans"xmlns : xsi = "http://ww.w.w3.org/2001/xmlschema-instance" xsi : schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd-2.5.xsd-2.5.xsd-2.5.xsd-2.5.xsd"> <!-클래스라는 클래스에 클래스를 넣습니다. <! <bean id = "helloorld"> </bean> <!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 공장-방법 = "GetInstance" ></bean><!-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
엔티티 클래스 HelloWorld를 만듭니다
package com.ithema10.spring.createobject; public class helloWorld {public void hello () {System.out.println ( "hello"); }}정적 공장 Helloworldfactory를 설정하십시오
package com.itheima10.spring.createobject.method; public class helloworldfactory {public static helloworld getinstance () {system.out.println ( "정적 메소드"); New Helloworld ()를 반환합니다. }}물리적 공장 HelloworldFactory2를 설정하십시오
package com.ithema10.spring.createobject.method; public class helloworldfactory2 { / *** 공장 객체는 메소드를 호출하기 전에* @return* / public helloworld getinstance () {return new Helloworld (); }}쓰기 테스트 방법 CreateObjectMethodTest
package com.itheima10.spring.createobject.method; import org.junit.test; import org.springframework.context.applicationcontext; import org.spramework.context.support.classpathxmlapplicationcontext;/** * @author zd */@author zd * @author @author CreateObjectMethodTest { / *** 기본적으로 스프링 컨테이너는 클래스의 기본 생성자를 호출하여 개체* / @test public void testCreateObject_Default () {ApplicationContext Context = new ClassPathXMlApplicationContext ( "ApplicationContext.xml"); Helloworld Helloworld = (Helloworld) context.getBean ( "HelloWorld"); helloworld.hello (); }/*** 정적 공장* <bean id = "helloworld2"Factory-Method = "getInstance"> </bean> 스프링 컨테이너가하는 일 : getInstance 메소드는 helloorldfactory 클래스*/@test public void testcreateobject_staticfactory () {ApplicationContext Context = New를 사용하여 호출됩니다. classPathXmlApplicationContext ( "ApplicationContext.xml"); Helloworld Helloworld = (Helloworld) context.getBean ( "HelloWorld2"); helloworld.hello (); }/** * 인스턴스 팩토리 메소드는 * <bean id = "helloworldfactory" *> </bean> * <bean id = "helloorld3"팩토리 -Bean = "HelloworldFactory"Factory-Method = "getinstance"> </bean> 봄 컨테이너 내부에서해야 할 일 : 1. helloworldfactory getinstance를 창출합니다. Object*/ @test public void testCreateObject_instanceFactory () {ApplicationContext context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); Helloworld Helloworld = (Helloworld) context.getBean ( "HelloWorld3"); helloworld.hello (); }}2 객체의 범위
객체의 범위에는 싱글 톤과 프로토 타입의 두 가지 속성이 있습니다. 싱글 톤은 싱글 톤을 의미합니다
2.1 싱글 톤 (기본값)
매년 스프링 IOC 컨테이너에는 하나의 개체 인스턴스 만 있습니다 (공유).
2.2 프로토 타입
콩을 여러 번 인스턴스화 할 수 있습니다 (일단 인스턴스를 만듭니다). 봄은 프로토 타입 콩의 전체 수명주기를 책임질 수 없습니다. 이것은 프로토 타입 스코프 객체에 대해 명확하고 프로토 타입 Bean이 보유한 값 비싼 자원을 확보해야한다는 것이 클라이언트의 책임임을 의미합니다.
<bean id = "HelloWorld"scope = "Singleton"> </bean>
<bean id = "helloorld"scope = "프로토 타입"> </bean>
Helloworld 클래스를 만듭니다
공개 클래스 helloworld {public list <string> lists = new Arraylist <string> (); public helloworld () {system.out.println ( "새 인스턴스"); } public void hello () {System.out.println ( "hello"); }}테스트 클래스 Scopetest를 만듭니다
package com.itheima10.spring.scope; import org.junit.test; import org.sprameframework.context.applicationcontext; import org.sprameframework.context.support.classpathpplicplicationcontext; public classcontext; /*** 콩 컨테이너에 콩을 부여합니다. 스프링 컨테이너 와이 클래스는 싱글 톤이며, 클래스의 속성은*/ @test public void testcreateobject_scope_default () {ApplicationContext Context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); helloworld hello1 = (Helloworld) context.getBean ( "HelloWorld"); hello1.lists.add ( "aaaa"); hello2 = (helloworld) context.getBean ( "HelloWorld"); hello2.lists.add ( "bbbb"); System.out.println (helloworld.lists.size ()); // 2, 그리고 새로운 인스턴스 만 출력}/** * Spring의 구성 파일이 다음과 같습니다. * <bean id = "HelloWorld"scope = "프로토 타입"> </bean> 그러면 스프링 컨테이너는 */@test public void testcreateobject_scope_prototype () {ApplicationContxt 컨트롤 = new에 대한 여러 개체를 만듭니다. classPathXmlApplicationContext ( "ApplicationContext.xml"); helloworld hello1 = (Helloworld) context.getBean ( "HelloWorld"); hello1.lists.add ( "aaaa"); hello2 = (helloworld) context.getBean ( "HelloWorld"); hello2.lists.add ( "bbbb"); System.out.println (helloworld.lists.size ()); // 1, 그리고 새 인스턴스 만 출력}}}3 초기화 시간
게으른 하중 - 기본적으로 컨테이너가 시작될 때 콩이 초기화되지만, 콩 노드의 게으른 이니트 = "true"를 지정하여 콩의 초기화를 지연시킬 수 있습니다. 현재 콩은 처음으로 콩을 회수하는 경우에만 초기화됩니다. 좋다:
<bean id = "xxx"lazy-init = "true"/>
모든 콩에 지연 초기화를 적용하려면 다음과 같이 루트 콩에 기본 게으른 이니트 = "True"를 설정할 수 있습니다.
<beans default-lazy-init = "true"...>
Spring은 기본적으로 시작시 모든 싱글 톤 콩을 미리 인스턴트합니다. 초기 인스턴스화는 초기화의 일부로 ApplicationContext가 모든 싱글 톤 빈을 자동으로 생성하고 구성한다는 것을 의미합니다. 이것은 보통 좋은 것입니다. 이러한 방식으로 구성의 오류는 즉시 발견 될 수 있기 때문입니다.
Lazy-Init는 거짓입니다. 스프링 컨테이너는 시작되면 오류를보고합니다 (더 나은 방법).
Lazy-Init는 사실이며, 스프링 컨테이너는 클래스를 호출 할 때 오류가 발생합니다.
ApplicationContext.xml을 구성하십시오
<bean id = "helloorld"scope = "프로토 타입"> </bean> </beans>
테스트 클래스를 작성하십시오
package com.ithema10.spring.createobject.way; import org.junit.test; import org.springframework.context.applicationcontext; import org.sprameframework.context.support.classpathxmlapplicationcontext; public classe { /* order by seart vise* 1. helloworld object* 3. 객체 호출 방법** <bean id = "helloworld"> </bean> <bean id = "helloorld2"> </bean> 스프링 컨테이너에 두 개의 콩이 선언되어 있기 때문에 스프링 컨테이너는 두 개의 객체를 만들어야합니다. struts2, 동적 컨테이너가 통합 될 때, 오류가 시작될 때, 스프링 컨테이너가 통합 될 것입니다. 오류는 특히 일찍 표시됩니다. Bean이 많은 양의 데이터를 저장하면이 방법이 좋지 않으며 데이터가 너무 일찍 메모리에 갇힐 수 있습니다. Bean이 싱글 톤이 아닌 경우 컨텍스트 인 경우 객체를 작성해야합니다. getBean*/ @test public void testCreateObject_when_default () {ApplicationContext Context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); Context.getBean ( "HelloWorld"); } /*** <bean id = "helloworld"lazy-init = "true"> < /bean>* order* 1. 스프링 컨테이너를 시작하십시오* 2. 컨텍스트. Bean이 많은 양의 데이터를 저장하는 경우 필요할 때 데이터를로드해야합니다*/ @test public void testcreateobject_when_lazy () {ApplicationContext context = new ClassPathXmlApplicationContext ( "ApplicationContext.xml"); Context.getBean ( "HelloWorld"); }}4 Init, 방법을 파괴하십시오
스프링이 콩을 초기화하거나 콩을 파괴하면 일부 가공이 필요한 경우가 있으므로 스프링은 콩을 생성하고 분해 할 때 콩의 두 수명주기 방법을 호출 할 수 있습니다. 작동 할 메소드를 지정할 수 있습니다.
<bean id = "foo"class = "... foo"init-method = "setup"decoration-method = "Teardown"/>
FOO가 스프링 컨테이너에로드되면 초기 방법 메소드를 호출하십시오. 컨테이너에서 foo가 삭제 될 때 배포 메드 호출 (Scope = Singleton Valid)
HelloWorld를 작성합니다
공개 클래스 helloWorld {public helloworld () {System.out.println ( "새 인스턴스"); } public void init () {system.out.println ( "init"); } public void destroy () {System.out.println ( "Destroy"); } public void hello () {System.out.println ( "hello"); }}Test Class InitDestroyTest를 작성하십시오
package com.ithema10.spring.ioc.initdestroy; import org.junit.test; import org.springframework.context.applicationcontext; import org.sprameframework.context.support.classpathxmlapplicationContext; public class initDestRoyTest { /** * init-methution : " 스프링 컨테이너* 2. Helloworld 객체 생성* 3. 실행 초기 방법* 스프링 컨테이너 내에서 자동 실행* 4. 객체 호출 방법* 5. 스프링 컨테이너가 닫힐 때만 실행할 수 있습니다. 콩이 싱글 톤이기도합니다* 스프링 컨테이너에 의해 내부적으로 호출됩니다. * 스프링 컨테이너에서 하나의 콩이 싱글 톤 인 경우에만 스프링 컨테이너가 물체의 생성, 초기화 및 파괴를 담당합니다. Helloworld Helloworld = (Helloworld) context.getBean ( "HelloWorld"); helloworld.hello (); classPathXmlApplicationContext ApplicationContext = (classPathXmlApplicationContext) 컨텍스트; ApplicationContext.close (); }} 실행 시퀀스 다이어그램 :
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.