복붙노트

[SPRING] MyClass.class 매개 변수를 필요로하는 factory 메소드 용 Spring Bean 삽입 방법

SPRING

MyClass.class 매개 변수를 필요로하는 factory 메소드 용 Spring Bean 삽입 방법

내 마스터 컨트롤러에 java.util.prefs.Preferences 빈을 삽입하려고합니다. 컨트롤러는 다음과 같습니다.

@Controller
class MyController {
    @Autowired
    private Preferences preferences;
}

application-context.xml 파일은 java.util.prefs.Preferences에 대한 bean을 작성합니다. factory 메소드를 사용하므로 bean을 생성하기 위해 다음과 같은 항목이 있습니다.

<bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage" />

Preferences.userNodeForPackage (param)는 Preference와 관련된 클래스의 매개 변수를 취합니다. 이 경우 Spring은 호출을 수행하여 bean을 생성해야한다.

Preferences.userNodeForPackage(MyController.class);

팩토리 메소드로 인스턴스화 된 스프링 빈에 클래스를 전달하는 방법은 무엇입니까? 감사

환경 정보 :

Java 7
Spring 3.1

해결법

  1. ==============================

    1.constructor-arg 요소를 지정할 수 있습니다.

    constructor-arg 요소를 지정할 수 있습니다.

    <bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage">
        <constructor-arg type="java.lang.Class" value="com.path.MyController" />
    </bean>
    

    이것에 대해서는 5.4.1 절의 공식 문서에서 설명합니다.

  2. ==============================

    2.잘 XML 기반의 구성 방법을 모르지만 당신이 어떻게 구성 클래스를 통해 그것을 인스턴스 수 말할 수 있습니다.

    잘 XML 기반의 구성 방법을 모르지만 당신이 어떻게 구성 클래스를 통해 그것을 인스턴스 수 말할 수 있습니다.

    @Configuration
    public class Config {
        @Bean(name="preferences")
        public java.util.prefs.Preferences preferences() {
            // init
            return java.util.prefs.Preferences.userNodeForPackage(YourExpectedClass.class);
        }
    }
    

    추신 :

    완전한 주석 기반 접근법 [contextClass = org.springframework.web.context.support.AnnotationConfigWebApplicationContext]을 사용하거나 아래 설정 파일에서 사용하려면 web.xml에서 구성 클래스 / 패키지를 추가해야합니다.

    <context:component-scan base-package="com.comp.prod.conf" />
    
  3. ==============================

    3.

     public class Preferences
     {  
         SomeBean someBean;
    
         public void setSomeBean(SomeBean someBean){
                this.someBean = someBean;
         }  
    
         public static Preferences createSampleBeanWithIntValue(SomeBean someBean)
         {
             Preferences preferences= new Preferences();
             preferences.setSomeBean(someBean);
             return preferences;
         }
    }
    
      <bean id="someBean" class="java.util.prefs.SomeBean"/>
    
     <bean id="preferences" class="java.util.prefs.Preferences" factory-method="userNodeForPackage" > 
    
        <constructor-arg ref="someBean "/>       
     </bean>
    

    참조를 참조하십시오.

    http://www.skorks.com/2008/10/are-you-using-the-full-power-of-spring-when-injecting-your-dependencies/

  4. ==============================

    4.먼저 XML 파일을 사용하거나 주석을 사용하여 '환경 설정'클래스의 빈을 만듭니다. 그때 @Autowired 어노테이션 기능을 활성화하기 위해 xml 설정을 사용하여 빈을 생성했다면이 를 사용할 수있다.  (또는)

    먼저 XML 파일을 사용하거나 주석을 사용하여 '환경 설정'클래스의 빈을 만듭니다. 그때 @Autowired 어노테이션 기능을 활성화하기 위해 xml 설정을 사용하여 빈을 생성했다면이 를 사용할 수있다.  (또는)

    어노테이션을 사용하여 Bean을 작성한 경우. 참고 : 스프링 서블릿 xml 파일에서 위의 태그를 정의하십시오.

  5. ==============================

    5.Spring Framework는 Factory 메소드를 이용하여 Bean을 삽입 할 수있는 기능을 제공합니다. 이렇게하기 위해 우리는 bean 요소의 두 속성을 사용할 수 있습니다.

    Spring Framework는 Factory 메소드를 이용하여 Bean을 삽입 할 수있는 기능을 제공합니다. 이렇게하기 위해 우리는 bean 요소의 두 속성을 사용할 수 있습니다.

    factory-method : bean을 삽입하기 위해 호출 될 factory 메소드를 나타냅니다. factory-bean : factory 메소드가 호출 될 Bean의 참조를 나타냅니다. 팩토리 메소드가 비 정적 인 경우에 사용됩니다. 클래스의 인스턴스를 리턴하는 메소드를 팩토리 메소드라고합니다.

    public class A {  
    public static A getA(){//factory method  
        return new A();  
    }  
    }  
    
  6. ==============================

    6."환경 설정"을 "MyController"의 속성으로 만들 수 있습니까? 좋아요.

    "환경 설정"을 "MyController"의 속성으로 만들 수 있습니까? 좋아요.

    <bean id="MyController" class="com.your.package.MyController">
        <property name="preferences" ref="preferences" />
    </bean>
    

    그런 다음 MyController에서 기본 설정에 대한 getter 및 setter 메서드를 사용할 수 있습니다.

    나는 이것이 효과가 있다고 생각한다.

  7. from https://stackoverflow.com/questions/18446230/how-to-inject-spring-bean-for-factory-method-requiring-myclass-class-parameter by cc-by-sa and MIT license