Spring 학습 노트 IOC 의존 주입

27800 단어 spring봄 공부
1. 개술
반전 제어 (Inversion of Control, 영어 줄 임 말 IOC) 는 컴퓨터 프로그램의 결합 문 제 를 줄 이 는 중요 한 대상 프로 그래 밍 법칙 이자 경량급 Spring 프레임 워 크 의 핵심 이다.제어 반전 은 일반적으로 주입 (Dependency Injection, 약칭 DI) 과 찾기 (Dependency Lookup) 에 의존 하 는 두 가지 유형 으로 나 뉘 는데 주입 응용 에 의존 하 는 것 이 더욱 광범 위 하 다.개념 못 알 아 들 었 어?괜 찮 습 니 다. 주입 에 의존 하 는 매력 을 구체 적 인 사례 를 통 해 알 아 보 세 요.
2. 일반적인 생 성 대상
Spring 프레임 워 크 를 사용 하지 않 기 전에 일반적인 javabean 대상 을 만 드 는 절 차 는 다음 과 같 습 니 다. 먼저 javabean 대상 입 니 다.
public class Bean {

    private int age;
    private String name;
    private boolean flag;

    public Bean() {
        super();
    }

    public Bean(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

    public Bean(int age, boolean flag) {
        super();
        this.age = age;
        this.flag = flag;
    }

    public Bean(int age, String name, boolean flag) {
        super();
        this.age = age;
        this.name = name;
        this.flag = flag;
    }

    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    @Override
    public String toString() {
        return "Bean [age=" + age + ", name=" + name + ", flag=" + flag + "]";
    }

}

그리고 생 성 과정:
        Bean bean = new Bean(12,true,"   ");

이렇게 해서 우리 가 원 하 는 bean 대상 의 실례 를 얻 었 다.
3. Spring 사용 후 대상 만 들 기
Spring 을 사용 한 후에 우 리 는 일반적인 방법 으로 대상 을 만 들 수 있 을 뿐만 아니 라 주입 에 의존 하 는 방식 으로 우리 가 원 하 는 대상 의 인 스 턴 스 를 얻 을 수 있 습 니 다.
  • Spring 프로필 beans. xml
  • 을 만 듭 니 다.
        
        <bean id="beanByProperty" class="com.shi.springmvc.bean.Bean">
            
            <property name="age" value="12">property>
            <property name="name" value="   ">property>
            <property name="flag" value="false">property>
        bean>

    그 다음 획득 과정:
            //   Spring   IOC   
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            //       bean    
            Bean bean = (Bean) ctx.getBean("beanByProperty");

    우 리 는 new 가 더 이상 필요 하지 않다 는 것 을 알 게 되 었 습 니 다. 우 리 는 설정 파일 을 만 들 고 IOC 라 는 용기 에서 우리 가 원 하 는 대상 을 잡 으 면 됩 니 다. 전통 적 인 자원 검색 방식 은 구성 요소 가 용기 에 자원 을 찾 아 달라 고 요구 합 니 다. 응답 으로 용 기 는 적시에 자원 을 되 돌려 줍 니 다. IOC 를 사용 한 후에 용 기 는 자원 을 관리 하 는 구성 요소 에 자발적으로 전달 합 니 다.구성 요소 가 해 야 할 일 은 자원 을 받 아들 이 는 적당 한 방식 만 선택 하 는 것 이다. 이런 행 위 는 검색 의 수 동적 인 형식 이 라 고도 불 린 다. 사실은 본질 적 으로 이것 은 프레임 워 크 의 사용 일 뿐만 아니 라 프로 그래 밍 사상의 전환 이기 도 한다.
    4. 위 에서 우리 가 사용 하 는 것 은 속성 주입 방식 으로 대상 의 인 스 턴 스 를 가 져 오 는 것 입 니 다. 아래 에서 우 리 는 구조 기 주입 방식 으로 대상 의 인 스 턴 스 를 가 져 옵 니 다.
    bean. xml 파일 에 추가 합 니 다:
        <bean id="beanByConstructor" class="com.shi.springmvc.bean.Bean">
            
            <constructor-arg value="15">constructor-arg>
            <constructor-arg value="   ">constructor-arg>
            <constructor-arg value="true">constructor-arg>
        bean>

    그리고
            Bean bean = (Bean) ctx.getBean("beanByConstructor");

    우리 가 원 하 는 대상 의 인 스 턴 스 를 얻 을 수 있 습 니 다.
    5. 속성 대상 이 존재 하고 구조 방법 파라미터 가 다른 대상 인 스 턴 스 의 획득 방식
    우 리 는 한 대상 에 여러 가지 구조 방법 이 있 을 수 있다 는 것 을 알 고 있 습 니 다. 매개 변수 개수 와 유형 도 다 를 것 입 니 다. 한 대상 에 속성 대상 이 포함 되 어 있 을 수 있 습 니 다. 그러면 우 리 는 어떻게 처리 합 니까?우 리 는 'Spring 학습 노트 AOP 차단기 의 기본 실현' 프로젝트 를 바탕 으로 bean. java (위 에 이미 제 시 된) BeanParent. java 대상 을 추가 합 니 다.
    public class BeanParent {
    
        private String country;
        private String language;
        private Bean bean;
        public String getCountry() {
            return country;
        }
        public void setCountry(String country) {
            this.country = country;
        }
        public String getLanguage() {
            return language;
        }
        public void setLanguage(String language) {
            this.language = language;
        }
        public Bean getBean() {
            return bean;
        }
        public void setBean(Bean bean) {
            this.bean = bean;
        }
        @Override
        public String toString() {
            return "BeanParent [country=" + country + ", language=" + language + ", bean=" + bean + "]";
        }
    
    }

    TestIOC. java 파일 (com. shi. springmvc. bean 패키지 아래):
    
    @Controller
    public class TestIOC {
    
        private String SUCCESS = "success";
    
        //   Spring  bean  
        @RequestMapping("/createBean")
        private String createBean(){
            Bean bean = new Bean();
            bean.setAge(12);
            bean.setFlag(true);
            bean.setName("   ");
            System.out.println(bean);
            return SUCCESS;
        }
    
    
        @RequestMapping("/getBeanByProperty")
        public String getBeanByProperty(){
            //   Spring   IOC   
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            //       bean    ,
            //  ,   beanByProperty  beans.xml     ,getBean        beans.xml    id    
            //       HelloWorld bean   
            Bean bean = (Bean) ctx.getBean("beanByProperty");
            System.out.println(bean);
            return SUCCESS;
        }
    
        @RequestMapping("/getBeanByConstructor")
        public String getBeanByConstructor(){
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            Bean bean = (Bean) ctx.getBean("beanByConstructor");
            System.out.println(bean);
            return SUCCESS;
        }   
    
        @RequestMapping("/getBeanByConstructor01")
        public String getBeanByConstructor01(){
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            Bean bean = (Bean) ctx.getBean("beanByConstructor01");
            System.out.println(bean);
            return SUCCESS;
        }   
    
        @RequestMapping("/getBeanByConstructor02")
        public String getBeanByConstructor02(){
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            Bean bean = (Bean) ctx.getBean("beanByConstructor02");
            System.out.println(bean);
            return SUCCESS;
        }
    
        @RequestMapping("/getParentBeanByProperty01")
        public String getParentBeanByProperty01(){
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            BeanParent beanParent = (BeanParent) ctx.getBean("beanParentByProp01");
            System.out.println(beanParent);
            return SUCCESS;
        }
    
        @RequestMapping("/getParentBeanByProperty02")
        public String getParentBeanByProperty02(){
            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("/bean.xml");
            BeanParent beanParent = (BeanParent) ctx.getBean("beanParentByProp02");
            System.out.println(beanParent);
            return SUCCESS;
        }   
    
    }

    test_ioc. jsp 파일 (WebContent 폴 더 아래)
    "java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    span class="hljs-string">"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    
    
    "Content-Type" content="text/html; charset=UTF-8">
      bean  
    
    
    
        "createBean">createBean
        

    "getBeanByProperty">getBeanByProperty

    getbeanByConstructor

    "getBeanByConstructor01">getBeanByConstructor01

    "getBeanByConstructor02">getBeanByConstructor02

    "getParentBeanByProperty01">getParentBeanByProperty01

    "getParentBeanByProperty02">getParentBeanByProperty02


    bean. xml 파일 (src 폴 더 아래)
    
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    
    
        
        <bean id="beanByProperty" class="com.shi.springmvc.bean.Bean">
            
            <property name="age" value="12">property>
            <property name="name" value="   ">property>
            <property name="flag" value="false">property>
        bean>
    
        <bean id="beanByConstructor" class="com.shi.springmvc.bean.Bean">
            
            <constructor-arg value="15">constructor-arg>
            <constructor-arg value="   ">constructor-arg>
            <constructor-arg value="true">constructor-arg>
        bean>
    
        <bean id="beanByConstructor01" class="com.shi.springmvc.bean.Bean">
            
            <constructor-arg value="15" index="0">constructor-arg>
            <constructor-arg value="   " index="1" type="String">constructor-arg>
        bean>
    
        <bean id="beanByConstructor02" class="com.shi.springmvc.bean.Bean">
            
            <constructor-arg value="15" index="0">constructor-arg>
            <constructor-arg value="true" index="1" type="boolean">constructor-arg>
        bean>
    
        <bean id="beanParentByProp01" class="com.shi.springmvc.bean.BeanParent">
            
            <property name="country" value="12">property>
            <property name="language" value="   ">property>
            <property name="bean" ref="beanByProperty">property>
        bean>
    
        <bean id="beanParentByProp02" class="com.shi.springmvc.bean.BeanParent">
            
            <property name="country" value="12">property>
            <property name="language" value="   ">property>
            <property name="bean">
    
                <bean class="com.shi.springmvc.bean.Bean">
                    <constructor-arg value="15">constructor-arg>
                    <constructor-arg value="   ">constructor-arg>
                    <constructor-arg value="true">constructor-arg>
                bean>
    
            property>
        bean>
    beans>

    위의 코드 는 속성 주입 (getBeanByProperty), 구조 기 주입 (getBeanByConstructor), 구조 방법 파라미터 가 다 르 고 (getBeanByConstructor 01 과 getBeanByConstructor 02) 를 통 해 Bean 대상 의 인 스 턴 스 를 얻 을 수 있 으 며, 대상 속성 에 하위 대상 이 있 는 BeanParent 가 인 스 턴 스 를 어떻게 얻 는 지 두 가지 방법 (설정 파일 에서 ref 와 실 용적 이지 않 은 ref 를 사용 합 니 다) 을 실현 합 니 다.
    6. 효과 도:
    우 리 는 빈 과 빈 파 렌 트 의 대상 인 스 턴 스 를 성공 적 으로 얻 었 다 는 것 을 알 수 있다.
    마지막 으로 demo 다운로드 주소 첨부: 내 가 들 어 갈 게.

    좋은 웹페이지 즐겨찾기