핵심 기능은 자신의 봄을 달성하기 위해

 

봄에 대해 이야기

       스프링 자바 개발자를위한 프레임 워크의 가장 잘 알고, 우리의 일상 개발은 매일 그것을 사용하고 있습니다. 그것은 편리한 사용하기 쉬운 장점, 다양한이 ... ...

우리는이 IOC, AOP, 의존성 주입, 악보 및 기타 전문 용어, 자바에 새로운 사람들을 많이 봄에 관해서 이야기한다, 혼란, 직관적으로 도대체 무엇을 이해하기 어렵지만, 다수의 사용 나는 그것이 우리를 가져왔다 편의와 사랑에 빠졌다.

 

탐색 봄

     우리가 그것을 달성하는 방법 IOC, 호기심 숙련 된 것입니다 사용할 때 왜 나를 그냥이 변수를 사용할 수 있습니다 변수 클래스에서 @AutoWrited을 추가? 의심으로 우리는 해답을 찾을 수 있습니다, 소스 코드를 설정하기 시작합니다. 약간의 노력으로, 우리는 마침내 발견 스프링 context.jar 패키지를 찾습니다

방법 AbstractApplicationContext 객체를 새로 고침, 실현 및 단계, 매우 복잡 또한 우리의 다른 놀라운하지만 전체 봄 함수의 실현 핵심입니다, 디자인 패턴을 많이 사용하는이, 그것은 전체 그림의 엿볼하기 어려운, 많은 장소는 우리가 디자인하지 않는다 이 때문에 실현 걸립니다 이유를 알고있다. 그러나 우리는 여전히 IOC 컨테이너가 실제로 해시 맵, 사용되는 알고 
실제로 반사, AOP 완료 동적 프록시를 사용하여 의존성 주입을. 약간의 현기증을 볼 수있는 코드의 큰 부분이 있습니다, 그것은 생명주기의 견고성을 강화하고 다양한 특성을 보장하는 것입니다. 어쨌든, 모든 다른 사람의 물건이었다, 우리는 우리가 많이 보았다 소스 코드를 사용하지만, 몇은 자신을 않습니다.

스프링 실현 분석

  어쨌든, 다른 사람은 다른 사람들이 자신의 물건을 우리 자신의 밖에 쓸 것을 알고 있습니다. 지금은 달성하기로 결정이라고하고 우리는 분석을 분석 할 필요가있다.

      모든 레벨 덜 침입 코드를 수행하는 방법 튀어을 취소?

         스프링 구성을 사용하는 유형을 식별하는 컨트롤러, 서비스 컴포넌트 콩 구성으로 고정 된 패턴, 계층 구조에있어서, 상기 규칙보다 큰

      봄 종속성을 관리하는 방법은?

          주석 또는 XML으로

      봄은 클래스가 관리해야하는 발견하는 방법은?

          주석 패킷이 경로 검색을 표시한다 +

      봄은 의존성 삽입 (Dependency Injection)을 달성하는 방법은?

         추가함으로써 반사 마커 주석 객체 인스턴스를 AutoWrited

      어떻게 콩 스프링을 관리하는?

         HashMap의 용기를 사용하여 설정 단일 컨테이너는 Bean을 실시

      그것을 달성하는 방법에 AOP 측면을 봄?

         동적 프록시 모드의 사용, 그리고 기본 구현 CGLIB를 제공하고 두 가지 방법을 JDK

      때 스프링이 메모리에로드된다?

         springMvc가 입구 배치 web.xml에 의해 트리거되고, springboot는 springApplication 초기화 트리거

 

 실현 스프링의 핵심 기능은 무엇 점을 포함?

      1. 정의 및 사용 주석

      2. 컨테이너 초기화

      3. 읽기 및 사용 프로필

      4.sevlet 사용

      정의 및 주석의 사용

      반사 6. 사용

      7.url 라우팅 및 매핑 방법

      8. 매개 변수 분석 및 바인딩

      9. 일반 및 탈출

 

 

 시작

  먼저 받는다는 프로젝트를 만들려면 다음과 같이 코드 구조는 다음과 같습니다

 

항아리 패키지 종속성을 추가 :

두 개의 항아리 패키지 플러스 플러그가 있습니다

에서 javax.servlet-api.jar을 코어 코드 및 처리 요구를 활성화
바인딩에 사용 fastjson.jar JSON 매개 변수를 

웹 컨테이너 부두의 시작으로 사용되는 부두 - 받는다는 - 플러그인


다음과 같이 메이븐 전체 코드는 다음과 같습니다
<? XML 버젼 = "1.0"인코딩 = "UTF-8" ?> 
< 프로젝트 의 xmlns = "http://maven.apache.org/POM/4.0.0" 
         의 xmlns :이 xsi = "http://www.w3.org / 2001 / 된 XMLSchema 인스턴스 " 
         는 xsi :의 schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd " > 
    < modelVersion > 4.0.0 </ modelVersion > 

    < 의 groupId > com.honstat </ 의 groupId > 
    < artifactId를 > 시험 스프링 </ artifactId를 > 
    <1.0 SNAPSHOT </ 버전 > 

    < 의존성 > 
        < 의존성 > 
            < 의 groupId > 에서 javax.servlet </ 의 groupId > 
            < artifactId를 > 에서 javax.servlet-API </ artifactId를 > 
            < 버전 > 4.0.1 </ 버전 > 
        </ 의존성 > 

        < 의존성 > 
            < 의 groupId > com.alibaba </ 의 groupId > 
            < artifactId를 >fastjson </artifactId를 > 
            < 버전 > 1.2.56 </ 버전 > 
        </ 의존성 > 
    </ 의존성 > 
    < 구축 > 
        < 플러그인 > 
            < 플러그인 > 
                < 의 groupId > org.eclipse.jetty </ 의 groupId > 
                < artifactId를 > 부두 - 받는다는 - 플러그인 < / artifactId를 > 
                < 버전 > 9.4.5.v20170502 </ 버전 > 
                <구성 > 
                    <scanIntervalSeconds > 10 </ scanIntervalSeconds > 
                    < 웹 애플리케이션 > 
                        < 의 contextPath > / </ 의 contextPath > 
                    </ 웹 애플리케이션 > 
                    < httpConnector > 
                        < 포트 > 8080 </ 포트 > 
                    </ httpConnector > 
                </ 구성 > 
            </ 플러그인 > 
            < 플러그인 > 
                < 의 groupId > org.apache.maven.plugins </ 의 groupId > 
                <artifactId를 > 받는다는 - 컴파일러 플러그인 </ artifactId를 > 
                < 구성 > 
                    < 소스 > 1.8 </ 소스 > 
                    < 대상 > 1.8 </ 대상 > 
                </ 설정 > 
            </ 플러그인 > 
        </ 플러그인 > 
    </ 구축 > 
</ 프로젝트 >
코드보기

 

 전면 컨트롤러 클래스 만들기

  반송 개시 후 해당 방법에 유사한 프론트 컨트롤러 서블릿 요청 특별한 처리는, 전방 컨트롤러 I 다른 블로그를 참조 할 것입니다 "SpringMvc 요구 처리 흐름 소스 퀘스트"

   여기에서 우리는 상속, CJDispatcherServlet라는 클래스를 만들 HttpServlet을 클래스 및 초기화의 HttpServlet의 ()의 doGet ()의 doPost ()이 세 가지 방법, 그림의 HomeService 최초의 무시 무시하고 StudentService을 쓸 수 없습니다

 

 구성의 web.xml

 구성 <서블릿>와 <서블릿 매핑>이 라벨

<서블릿>는 필요

1. 서블릿의 이름을 지정

 2. 전단 컨트롤러 클래스 지정 처리 요구

 3. 초기 구성 파일 경로를 설정합니다

 

 전체 web.xml 파일은 다음과 같습니다 :

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

         version="2.5">
    <servlet>
        <servlet-name>cjservletMVC</servlet-name>
        <servlet-class>com.honstat.spring.service.CJDispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>spring/application.properties</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>cjservletMVC</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
View Code

 

 添加注解

 我们知道,spring里面是通过给类加注解来识别各种使用场景的,那我们就来实现几个必用的

作用在类上的:

  JCController

  JCService

  JCComponent

 

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface JCController {
    String value() default  "";
}

 全部采用这种类型

作用在方法上和类上的:

JCRequestMapping

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface JCRequestMapping {
    String value() default "";
}

 

作用在字段上的:

JCAutoWrited

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface JCAutoWrited {
    String value() default "";
}

 

到此我们已经初步的创建完了需要准备的类,准备工作告一段落。

 

 由于篇幅有限,下一篇开始实现核心功能了!

 完整代码地址

추천

출처www.cnblogs.com/jingch/p/11368982.html