2013-08-26 1 views
16

java.util.prefs.Preferences Bean을 내 마스터 컨트롤러에 삽입하려고합니다. 응용 프로그램-의 context.xml 파일 java.util.prefs.Preferences의 빈을 생성MyClass.class 매개 변수를 필요로하는 팩토리 메소드에 Spring Bean을 삽입하는 방법

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

: 같은 컨트롤러가 보인다. 매개 변수 기본 설정에 관련된 클래스에 대한

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

Preferences.userNodeForPackage (PARAM)한다 : 내가 다음 빈을 생성하는 항목이 때문에 공장 방법을 사용합니다. 이 경우 Spring은 호출을 수행하여 빈을 만들어야합니다 :

Preferences.userNodeForPackage(MyController.class); 
클래스는 팩토리 메소드 인스턴스화 스프링 빈에 전달 될 수있는 방법

? 감사

환경 정보

는 :

Java 7 
Spring 3.1 

답변

22

당신이 공식 문서 here, 섹션 5.4.1에 설명되어있는 constructor-arg 요소

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

을 지정할 수 있습니다. 정적 공장 메소드

인수는 생성자 실제로 사용되었던 것과 똑같은, 요소를 통해 공급된다. 팩토리 메서드에서 반환하는 클래스 형식은 에 정적 팩터 리 메서드가 포함 된 클래스와 동일한 형식 일 필요는 없습니다. 인스턴스 (정적이지 않은) 팩토리 메소드는 본질적으로 동일한 방식으로 사용됩니다 (class 속성 대신 factory-bean 속성 을 사용하는 것과는 별도). 따라서 여기서는 에 대해 자세히 설명하지 않습니다.

+0

그는 견적 및 설명서를 읽어 @NandkumarTekale userNodeForPackage'에 Preferences' –

+2

'의()'방식이 아닌 생성자를 매개 변수로 인수를 제공해야합니다. 'factory-method' 속성을 지정했을 때 그렇게하는 방법입니다. –

+0

+1 좋은 +1. :) –

2
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/

-1

는 "환경 설정", "MyController에"의 속성을 사용해 볼 수 기준을 참조하시기 바랍니다. 다음

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

과 같은 뭔가 MyController에있는 기본 설정에 대한 getter와 setter 메소드를 가지고있다.

나는 이것이 작동해야한다고 생각합니다.

+1

OP의 문제로 개체가 자동으로 실행되지 않습니다. 문제는 정적 팩토리 메소드에 대한 지정 및 인수입니다. –

3

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

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

P. :

웹에서 스캔하기 위해 구성 클래스/패키지를 추가해야합니다.XML은 완전한 주석 기반의 접근 방식 [contextClass=org.springframework.web.context.support.AnnotationConfigWebApplicationContext]을 사용하거나 다음과 같이 설정 파일에있는 경우 :

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

눈을 +1 눈 : p –

+0

+1 아마도 Maven의 봄 문맥 유물에서 나온 답을 언급해야합니다. –

0

먼저 '환경 설정'클래스의 bean을 작성하거나 XML 파일을 사용하거나 주석을 사용하여. 당신은 당신이 주석을 사용하여 빈을 만든 경우 @Autowired 어노테이션 기능을
(또는)

<context:component-scan base-package="com.estudo.controller" />
를 활성화하기 위해 XML 구성을 사용하여 콩을 만든 경우
다음이 <context:annotation-config>을 사용할 수 있습니다 .
참고 : 스프링 서블릿 xml 파일에서 위의 태그를 정의하십시오.

0

스프링 프레임 워크는 factory 메소드를 사용하여 bean을 주입하는 기능을 제공합니다. 이렇게하기 위해 우리는 bean 요소의 두 가지 속성을 사용할 수 있습니다.

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

public class A { 
public static A getA(){//factory method 
    return new A(); 
} 
} 
관련 문제