상세 해석 Spring 프레임 워 크---IOC 조립 Bean

16390 단어 springioc
IOC 조립 빈
(1)Spring 프레임 Bean 의 예화 방식 은 세 가지 방식 으로 빈 을 예화 시 켰 다.
  • 구조 방법 을 예화(기본 적 으로 매개 변수 가 없 으 며 가장 많이 사용)
  • 정태 공장 실례 화
    실례 공장 실례 화
    이 세 가지 방법의 applicationContext.xml 프로필 을 먼저 쓰 겠 습 니 다.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context" 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.xsd">
        
      <!-- Bean        =================== -->  
       <!-- 2.1          -->
       <bean id="bean1" class="com.study.spring.b_instance.Bean1"></bean>
       <!-- 2.2         factory-method            -->
       <bean id="bean2" class="com.study.spring.b_instance.Bean2" factory-method="createInstance"></bean>
       <!-- 2.3           -->
       <bean id="bean3Factory" class="com.study.spring.b_instance.Bean3Factory"></bean>
       <bean id="bean3" factory-bean="bean3Factory" factory-method="getInstance"></bean>
      <!-- end.Bean        ==================== -->
    Bean 1 클래스
    
    public class Bean1 {
      
      //                        
    }
    Bean 2 클래스
    
    public class Bean2 {
      private static Bean2 Bean2 = new Bean2();
    
      private Bean2() {
      }
    
      public static Bean2 createInstance() {
        return Bean2;
      }
    }
    
    Bean 3 클래스
    
    public class Bean3 {
    
    }
    
    
    Bean3Pactory 류
    
    public class Bean3Factory {
      
      private Bean3Factory(){
        
      }
       
      public Bean3 getInstance(){
        return new Bean3();
      }
    }
    
    테스트 클래스 InstanceDemo
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class InstanceDemo {
      
      //       
      @Test
      public void demo3(){
        //           
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        
        Bean3 bean3 =(Bean3) applicationContext.getBean("bean3");
        System.out.println(bean3);
        
      }
      
      //      
      @Test
      public void demo2(){
        //           
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        
        Bean2 bean2 =(Bean2) applicationContext.getBean("bean2");
        System.out.println(bean2);
        
      }
      //      bean  
      @Test
      public void demo1(){
        //           
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
        
        Bean1 bean1 =(Bean1) applicationContext.getBean("bean1");
        System.out.println(bean1);
        
      }
    }
    /*
     *          com.study.spring.b_instance.Bean1@7229c204      
     */
    
    
     (2).bean 의 기타 설정:
    일반적으로 빈 을 설치 할 때 빈 의 이름 으로 id 속성 을 지정 합 니 다.
    id 속성 은 IoC 용기 에서 유일 해 야 합 니 다.
    id 의 이름 이 XML 의 ID 속성 에 대한 명명 규범 을 만족 시 키 려 면 알파벳 으로 시작 해 야 합 니 다.알파벳,숫자,연결 문자,밑줄,문장,콜론 을 사용 할 수 있 습 니 다.
    빈 의 이름 에 특수 문자 가 포함 되 어 있 으 면 name 속성 을 사용 해 야 합 니 다.예 를 들 어
    name 속성 이 같 을 수 있 기 때문에 뒤에 Bean 이 나타 나 면 그 전에 나 온 동명 의 Bean 을 덮어 씁 니 다.
    id 와 name 의 차이 점:
    id XML 제약 을 준수 하 는 id 의 제약.id 제약 은 이 속성의 값 이 유일한 것 임 을 보증 합 니 다.또한 자모 로 시작 해 야 합 니 다.자모,숫자,연결 문자,밑줄,문장,사칭 을 사용 할 수 있 습 니 다.
    name 에 이러한 요구 사항 이 없습니다.
    bean 탭 에 id 가 설정 되 어 있 지 않 으 면 name 은 id 로 사용 할 수 있 습 니 다.
    Bean 의 scope 속성
    
     <!-- 3.Bean scope  ==================== -->  
       <bean id="product" class="com.study.spring.c_scope.Product" scope="singleton"></bean>
     <!-- end.Bean scope  =========== -->  
     * singleton:단일 예.(기본 값.)
     * prototype:여러 가지.
    *request:웹 개발 중.이 대상 을 request 범위,request.setAttribute()에 저장 하 는 대상 을 만 들 었 습 니 다.
    *session:웹 개발 중.이 대상 을 session 범위,session.setAttribute()에 저장 하 는 대상 을 만 들 었 습 니 다.
    *globalSession:일반적으로 Porlet 응용 환경 에 사 용 됩 니 다.분포 식 개발 을 말 합 니 다.porlet 환경 이 아니 라 globalSession 은 session 과 같 습 니 다.
    3.Bean 속성의 의존 주입
    앞에서 대상 을 어떻게 얻 는 지 알 고 있 습 니 다.대상 에 게 주 는 속성 할당 을 알 아야 합 니 다.
     
    다음은 예 를 들 어 설명 한다. 
    자동차 종류
    
    public class Car {
    
      private String name;
    
      private double price;
    
      public Car(String name, double price) {
        super();
        this.name = name;
        this.price = price;
      }
    
      @Override
      public String toString() {
        return "Car [name=" + name + ", price=" + price + "]";
      }
    }
    
    
    Car 2 류
    
    public class Car2 {
      private String name;
    
      private double price;
    
      public void setName(String name) {
        this.name = name;
      }
    
      public void setPrice(double price) {
        this.price = price;
      }
    
      @Override
      public String toString() {
        return "Car2 [name=" + name + ", price=" + price + "]";
      }
    
    }
    
    
    CarInfo 클래스
    
    public class CarInfo {
      
      public String getName(){
        return "  H6";
      }
      
      public double caculatePrice(){
        return 110000;
      }
    }
    
    
    Collection Bean 클래스
    
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    public class CollectionBean {
      private String name;
    
      private Integer age;
    
      private List<String> hobbies;
    
      private Set<Integer> numbers;
    
      private Map<String, String> map;
    
      private Properties properties;
    
      public String getName() {
        return name;
      }
    
      public void setName(String name) {
        this.name = name;
      }
    
      public Integer getAge() {
        return age;
      }
    
      public void setAge(Integer age) {
        this.age = age;
      }
    
      public List<String> getHobbies() {
        return hobbies;
      }
    
      public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
      }
    
      public Set<Integer> getNumbers() {
        return numbers;
      }
    
      public void setNumbers(Set<Integer> numbers) {
        this.numbers = numbers;
      }
    
      public Map<String, String> getMap() {
        return map;
      }
    
      public void setMap(Map<String, String> map) {
        this.map = map;
      }
    
      public Properties getProperties() {
        return properties;
      }
    
      public void setProperties(Properties properties) {
        this.properties = properties;
      }
    
      @Override
      public String toString() {
        return "CollectionBean [name=" + name + ", age=" + age + ", hobbies=" + hobbies + ", numbers=" + numbers
            + ", map=" + map + ", properties=" + properties + "]";
      }
      
    }
    
    
    Employee 클래스
    
    public class Employee {
    
      private String name;
    
      private Car2 car2;
    
      public void setName(String name) {
        this.name = name;
      }
    
      public void setCar2(Car2 car2) {
        this.car2 = car2;
      }
    
      @Override
      public String toString() {
        return "Employee [name=" + name + ", car2=" + car2 + "]";
      }
    
    }
    
    
    TestDi 테스트 클래스
    
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class TestDi {
      
      @Test
      public void demo6() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        CollectionBean collectionBean = (CollectionBean) applicationContext.getBean("collectionBean");
    
        System.out.println(collectionBean);
      }
      
      
      @Test
      public void demo5() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        Car2 car2 = (Car2) applicationContext.getBean("car2_2");
    
        System.out.println(car2);
      }
      
      
      @Test
      public void demo4() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        Employee e = (Employee) applicationContext.getBean("employee2");
    
        System.out.println(e);
      }
      
      @Test
      public void demo3() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        Employee e = (Employee) applicationContext.getBean("employee");
    
        System.out.println(e);
      }
    
      @Test
      public void demo2() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        Car2 car2 = (Car2) applicationContext.getBean("car2");
    
        System.out.println(car2);
      }
    
      @Test
      public void demo1() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    
        Car car = (Car) applicationContext.getBean("car");
    
        System.out.println(car);
      }
    }
    
    
    위의 이 몇 가지 유형 은 모두 가장 중요 한 것 이 아니다.우 리 는 주로 프로필 을 어떻게 쓰 는 지 보 는 것 이 가장 관건 적 인 것 이다.
    applicationContext.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:p="http://www.springframework.org/schema/p"
      xmlns:context="http://www.springframework.org/schema/context" 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.xsd">
      
      
      <!-- Bean     =========== -->  
       <!-- 4.1      -->
        <bean id="car" class="com.study.spring.e_di.Car">
          <!--    .        -->
          <!-- <constructor-arg index="0" value="   "></constructor-arg>
           <constructor-arg index="1" value="1500000"></constructor-arg> -->
           <!--    .       -->
           <!-- <constructor-arg name="name" value="  "></constructor-arg>
           <constructor-arg name="price" value="500000"></constructor-arg> -->
           <!--    .       -->
           <constructor-arg type="java.lang.String" value="  "></constructor-arg>
           <constructor-arg type="double" value="600000"></constructor-arg>
        </bean>
        
       <!-- 4.2setter      --> 
       <bean id="car2" class="com.study.spring.e_di.Car2">
         <property name="name" value="   "></property>
         <property name="price" value="100000"></property>
       </bean>
       
       <bean id="employee" class="com.study.spring.e_di.Employee">
         <property name="name" value="  "></property>
         <property name="car2" ref="car2"></property>
       </bean>
       
       <!--   p     --><!--      p  ,     sxd      xmlns:p="http://www.springframework.org/schema/p"-->
        <bean id="car22" class="com.study.spring.e_di.Car2" p:name="  " p:price="500000">
       </bean>
       <bean id="employee2" class="com.study.spring.e_di.Employee" p:name="  " p:car2-ref="car22"></bean>
       
        <!--   spEL    -->
       <bean id="carInfo" class="com.study.spring.e_di.CarInfo"></bean>
        <bean id="car2_2" class="com.study.spring.e_di.Car2">
          <property name="name" value="#{carInfo.name}"></property>
          <property name="price" value="#{carInfo.caculatePrice()}"></property>
        </bean>
        
       <!--           -->  
        <bean id="collectionBean" class="com.study.spring.e_di.CollectionBean">
          <!--         -->
          <property name="name" value="  "></property>
          <property name="age" value="12"></property>
          <!--   list   -->
           <property name="hobbies">
             <list>
               <value>  </value>
               <value>  </value>
               <value>   </value>
             </list>
           </property>
           
           <!--   set   -->
           <property name="numbers">
             <set>
               <value>10</value>
               <value>20</value>
               <value>30</value>
               <value>40</value>
               <value>50</value>
             </set>
           </property>
           <!--   map   -->
           <property name="map">
             <map>
               <entry key="birthday" value="2017-1-1"></entry>
               <entry key="address" value="    "></entry>
               <entry key="sex" value="female"></entry>
             </map>
           </property>
           
           <!--   Properties -->
           <property name="properties">
             <props>
               <prop key="compamy">    </prop>
               <prop key="pnum">200</prop>
             </props>
           </property>
        </bean>
        
      <!-- end Bean     ============ -->  
      <import resource="classpath:bean1.xml"/>    
      <import resource="classpath:bean2.xml"/>    
      <!--          src      beans.xml          -->  
        
    </beans>
    applicationContext.xml 에 관 한 이 프로필 의 내용 은 반드시 이해 해 야 합 니 다.제 가 쓴 것 은 비교적 기본 적 이 고 전면적 입 니 다.
    네 임 스페이스 p 사용 에 대해 설명 하 겠 습 니 다.   
    p:<속성 명>="xxx"상수 치 도입
    p:<속성 명>-ref="xxx"다른 Bean 대상 참조
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기