2012-01-05 1 views
1

У меня есть класс, который хочет использовать некоторые классы @Autowired service в качестве полей, но сам этот класс не является @service или @Component, потому что ему нужен не- -default, чтобы использовать его правильно.Весенний клиент не является весенним бобом, но хочет автообученные поля бобов

Есть ли аннотация, чтобы заявить, что «пожалуйста, сканируйте этот класс для @Autowiring, но это не сам весна»? Для меня это кажется подлинным прецедентом (клиент хочет автоувеличивать и использовать некоторые бобы, но сам не является весенним бобом)?

ответ

0

Вам необходимо вручную ввести компонент и использовать контекст: аннотация. Если у вас есть класс следующим образом

public class ABD{ 

@Autowired 
public Bean2 b2;  

}

и если вы впрыснуть ABD в какой-то другой боб через инъекции конструктора, @Autowired будет применяться еще весной не сможет instatiate свой боб, как это не не имеют конструктора аргументов.

С другой стороны, если ваш объект не является компонентом, см. Обсуждение этого вопроса на How to autowire a bean inside a class that is not a configured bean?. Код идет что-то вроде этого

 context.getAutowireCapableBeanFactory().autowireBean(this); 

Чтобы получить контекст в не Spring бина, вы могли бы, вероятно, использовать ContextSingletonBeanFactoryLocator. Но намного легче, если вы сделаете холод, сделайте этот весенний боб, используя инъекцию конструктора.

0

Вы можете попробовать что-то вроде

<bean id="exampleBean" class="examples.ExampleBean"> 
    <constructor-arg><ref bean="anotherExampleBean"/></constructor-arg> 
    <constructor-arg><ref bean="yetAnotherBean"/></constructor-arg> 
    <constructor-arg type="int"><value>1</value></constructor-arg> 
</bean> 

<bean id="anotherExampleBean" class="examples.AnotherBean"/> 
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/> 

public class ExampleBean { 

    private AnotherBean beanOne; 
    private YetAnotherBean beanTwo; 
    private int i; 

    public ExampleBean(AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) { 
     this.beanOne = anotherBean; 
     this.beanTwo = yetAnotherBean; 
     this.i = i; 
    } 
} 

Для класса, который должен быть autowired. См. this для получения дополнительной информации.