2016-10-11 5 views
1

내가 @Autowired이었던 클래스가 @Component이고 또 다른 클래스가있다. 그러나이 @Component 주석을 제거하고 대신 이전에 autowired 클래스에 @Bean 주석 메소드를 사용하여 만듭니다.@Component에 주석이 달린 클래스를 @Bean 주석이 달린 메소드로 바꾼다

클래스가처럼 보였다 이전

: 나는 @Component 주석을 제거하고이 같은 @Bean 주석이 방법을 쓴 그래서 지금

@Component 
public class MyClass implements IMyClass 
{ 
    // Stuff 
} 

@Configuration 
public class MyUsingClass 
{ 
    @Autowired 
    private IMyClass myClass; 

    private void methodUsingMyClass() 
    { 
     myClass.doStuff(); 
    } 
} 

:

public class MyClass implements IMyClass 
{ 
    // Stuff 
} 

@Configuration 
public class MyUsingClass 
{ 
    @Bean 
    public IMyClass getMyClass() 
    { 
     return new MyClass(); 
    } 

    .... 
} 

내 질문이 주위의 이전 호출을 대체를 새 빈을 사용하려면 myClass.doStuff()입니다. 지금은 민간 방법에 유형 MyClass의 매개 변수를 전달 마십시오

private void methodUsingMyClass() 
{ 
    getMyClass().doStuff(); 
} 
:

private void methodUsingMyClass(final MyClass myClass) 
{ 
    myClass.doStuff(); 
} 

... 또는 내가이 메소드를 직접 호출 할 (나에게 올바른 방법을하지 않는 것)

... 또는이 둘 중 어느 것도 맞지 않습니까?

답변

1

나는 @Bean 주석을 오해한다고 생각합니다. Bean을 만드는 데 사용할 수 있습니다. 그래서 기본적으로 봄은 모든 수업을 검사하고, @Bean을 찾아 더 많이 만들지 않을 것입니다. <bean></bean>으로 만든 bean을 사용하는 것처럼이 bean을 사용할 수 있습니다. 콩을 실제로 사용하려면 ApplicationContext 또는 @Autowire에서 가져와야합니다. 물론 코드의 다른 함수처럼이 함수를 사용하여 해당 객체의 새 인스턴스를 만들 수 있지만 콩을 사용하여 달성하려는 목표와 모순됩니다.

0

사용하여 주석이 솔루션

public class MyClass implements IMyClass{ 

    private OtherClassInjection otherClassInjection; 

    private OtherClassInjection2 otherClassInjection2; 

    MyClass(OtherClassInjection otherClassInjection, OtherClassInjection2 otherClassInjection2){ 
     this.otherClassInjection=otherClassInjection; 
     this.otherClassInjection2=otherClassInjection2; 
    } 

    public void useObject(){ 
     otherClassInjection.user(); 
    } 

}

@Bean(name = "myClass") 
@Autowired 
@Scope("prototype") //Define scope as needed 
public MyClass getMyClass(@Qualifier("otherClassInjection") OtherClassInjection otherClassInjection, 
          OtherClassInjection2 otherClassInjection2) throws Exception 
{ 
    return new MyClass(otherClassInjection, otherClassInjection2); 
} 

논리, 그것은 문맥이 그 콩을 알고있는 경우 때 주입하려는 것, 빈을 만들 @Autowired 작업 주입입니다.

나는 그런 식으로 사용하고 있습니다.