Spring에서 실례화된 bean의 네 가지 방식 상세 설명

7633 단어 spring실례화bean
앞말
Bean의 실례화된 방식을 소개하기 전에 우리는 먼저 Bean이 무엇인지, 그리고 Bean의 설정 방식을 소개해야 한다.
스프링을 하나의 대형 공장으로 간주한다면, 스프링 용기 속의 Bean이 바로 이 공장의 제품이다.Spring 공장에서 Bean을 생산하고 관리하려면 구성 파일에 어떤 Bean이 필요하고 어떤 방식으로 이 Bean을 조립해야 하는지 지정해야 합니다.
Spring 용기는 두 가지 형식의 프로필을 지원합니다. 각각Properties 파일 형식과 xml 파일 형식입니다. 실제 개발에서 가장 많이 사용되는 금액은 xml 파일 형식입니다. 따라서 아래의 설명에서 우리는 xml 파일 형식의 프로필 형식으로 설명합니다.XML 프로필의 루트 요소는 입니다. 여러 개의 하위 요소를 포함할 수 있습니다. 각 하위 요소는 하나의 Bean을 정의하고 Bean이 스프링 용기에 어떻게 조립되는지 설명합니다. 요소의 속성은 다음과 같습니다.
  • id: Bean의 유일한 표지부호로 Spring이 Bean에 대한 설정, 관리는 모두 이 속성을 통해 이루어진다
  • name:Spring 역시name를 통해 Bean을 설정하고 관리할 수 있으며,name 속성은 Bean에 여러 개의 이름을 정의할 수 있으며, 각 이름은 쉼표로 구분할 수 있다
  • class: 이 속성은 Bean의 구체적인 실현 클래스를 지정하고 반드시 완성된 클래스 이름이어야 하며 사용 클래스의 전한정명
  • scope: Bean 실례의 작용역을 설정하는데 그 속성은singleton(단례),prototype(원형),request,session,global Session이 있습니다. 기본값은singleton입니다. 이 속성은 다음 블로그에서 상세하게 설명합니다
  • constructor-arg:원소의 하위 원소는 이 원소가 구조 파라미터에 전입되어 실례화(이전 블로그의 마지막 보충은 이 속성을 사용하여 실례화된 것)를 할 수 있으며, 이 원소의 index 속성은 구조 파라미터의 번호(0부터)를 지정한다
  • property:원소의 서브원소는 Bean 실례 중의 setter 방법을 호출하여 속성 값을 완성하고 의존 주입을 완성한다
  • ref:property,constructor-arg 등 원소의 하위 원소로 이 원소 중의 bean 속성은 Bean 공장의 어떤 Bean 실례에 대한 인용을 지정하는 데 사용된다
  • value:property,constructor-arg 등 원소의 하위 원소는 상량값을 직접 지정하는 데 사용된다
  • list: List나 그룹 형식의 의존 주입을 봉인하는 데 사용합니다
  • set: Set 또는 그룹 유형의 의존 주입을 봉인하는 데 사용합니다
  • 맵: 맵이나 그룹 유형의 의존 주입을 봉인하는 데 사용합니다
  • entry:map 요소의 하위 요소, 키 값을 설정하는 데 사용됩니다. 키 속성은 문자열 형식의 키 값을 지정하고,ref 또는value 하위 요소는 그 값을 지정합니다..
  • 프로필에서 일반적인 Bean은 id와class 두 속성만 정의하면 됩니다. Bean을 정의하는 방법은 다음과 같습니다.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
        <!--  spring, spring  -->
        <bean id="userDao" class="com.ioc.UserDaoImpl"/>
        <bean name="userDao1, userDao2" class="com.ioc.UserDaoImpl2"/>
    </beans>
    상기 코드에서 각각 id와name 속성을 사용하여 두 개의 Bean을 정의하고class 요소를 사용하여 해당하는 실현 클래스를 지정합니다. 만약에 id와name를 지정하지 않으면Spring은class 값을 id로 사용합니다.
    Spring 실례화 bean의 네 가지 방식
    본고는 주로 네 가지 실례화 bean 방식(주입 방식)이나 의존 대상의 실례화 네 가지 방식을 소개한다.위의 프로그램, bean 대상을 만드는 방법, 어떤 방법을 사용하는지, 함수를 만드는 방식을 사용합니다(Spring은 함수를 사유화하는 상황에서 클래스 대상을 만들 수 있습니다)
    일반적인 작성 방식은 다음과 같습니다.
    1) setter 방법
    2) 구조 함수
    3) 정적 공장
    4) 인스턴스 공장
    1. setter 방식으로
    
    public interface IUserDao {
        void addUser();
        void delUser();
        void updateUser();
       }
       public class UserDaoImpl implements IUserDao {
        public void addUser() {
         System.out.println("addUser ");
        }  
        public void delUser() {
         System.out.println("delUser ");
        }  
        public void updateUser() {
         System.out.println("updateUser ");
        }
       }
       public class UserAction {
         private IUserDao dao; //dao , springg ,  get set  
           public void execute(){
           dao.addUser();
           dao.updateUser();
           dao.delUser();
         }
        }
    
    // 
    <bean name="userAction_name" class="cat.action.UserAction" >
    <property name="dao" ref="userDao_name" /> // 
    </bean> 
    <bean name="userDao_name" class="cat.dao.UserDaoImpl" />
    
    // 
    ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
    UserAction action=(UserAction)ctx.getBean("userAction_name");
    action.execute(); 
    2. 구조 함수
    
    public class UserAction {
      //public UserAction(){}   
      // , get set 
      private UserInfo user;
      private String school;
      private IUserDao dao;  
      // Spring  
      public UserAction(IUserDao dao,UserInfo user,String school){
        this.dao=dao;
        this.school=school;
        this.user=user;
        } 
      public void execute(){
        dao.addUser();
        dao.updateUser();
        dao.delUser(); 
        System.out.println(user);
        System.out.println(school);
    }
    
    // 
    <bean name="userInfo_name" class="cat.beans.UserInfo" >
      <property name="id" value="1" />
      <property name="userName" value=" " />
      <property name="password" value="123" />
      <property name="note" value=" " />
    </bean>   
    <bean name="userAction_name" class="cat.action.UserAction" >
      <constructor-arg ref="userDao_name" />
      <constructor-arg ref="userInfo_name" />
      <constructor-arg value=" " />
    </bean> 
    /*
        type   ,  type  
    <bean name="userAction_name" class="cat.action.UserAction" >
    <constructor-arg index="0" ref="userDao_name" type="cat.dao.IUserDao" />  , 
    <constructor-arg index="1" ref="userInfo_name" type="cat.beans.UserInfo" />
    <constructor-arg index="2" value=" " />
    </bean>
    */   
    <bean name="userDao_name" class="cat.dao.UserDaoImpl" />
    
    // 
    ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
    UserAction action=(UserAction)ctx.getBean("userAction_name");
    action.execute(); 
    3. 정적 공장 방식
    
    // , dao 
    public class UserDaoFactory {
    public static IUserDao createUserDaoInstance(){
      return new UserDaoOracleImpl();
      }
    } 
    public class UserAction {
      private IUserDao dao;// , set 
      public void execute(){
        dao.addUser();
        dao.updateUser();
        dao.delUser();
    }
    public void setDao(IUserDao dao) {
        this.dao = dao;
        } 
    }
    
    //  
    <bean name="userAction_name" class="cat.action.UserAction" >
    <property name="dao" ref="userDao_name" />
    </bean>
    <bean name="userDao_name" class="cat.dao.UserDaoFactory" factory-method="createUserDaoInstance" />
    
    // 
    ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
    UserAction action=(UserAction)ctx.getBean("userAction_name");
    action.execute(); 
    4. 실례 공장
    
    //  =>
    public class UserDaoFactory {
    // 
    public IUserDao createUserDaoInstance(){
      return new UserDaoOracleImpl();
      }
    }
    
    //  
    <bean name="userAction_name" class="cat.action.UserAction" >
    <property name="dao" ref="userDao_name" />
    </bean>
    <bean name="userDaoFactory_name" class="cat.dao.UserDaoFactory" />
    <bean name="userDao_name" factory-bean="userDaoFactory_name" factory-method="createUserDaoInstance" />
    총결산
    이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 대해 참고 학습 가치가 있기를 바랍니다. 의문이 있으면 댓글로 교류해 주십시오. 저희에 대한 지지에 감사드립니다.

    좋은 웹페이지 즐겨찾기