Клиент Spring не является бобом весны, но хочет, чтобы поля были связаны автоматически - PullRequest
2 голосов
/ 05 января 2012

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

Есть ли аннотация, чтобы объявить, что "пожалуйста, отсканируйте этот класс на наличие @Autowiring, но это не сам боб пружины"?Мне кажется, это настоящий сценарий использования (клиент хочет выполнить автоматическое подключение и использовать несколько компонентов, но сам по себе не является компонентом-источником)?

Ответы [ 2 ]

0 голосов
/ 05 января 2012

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

<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;
    }
}

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

0 голосов
/ 05 января 2012

Вам нужно вручную внедрить bean-компонент и использовать context: annotation config. Если у вас есть класс следующим образом

public class ABD{

@Autowired
public Bean2 b2;    

}

и если вы внедрите ABD в какое-либо другое внедрение через bean-конструктор, @Autowired применит это, иначе Spring не сможет создать ваш бин, поскольку у него нет конструктора без аргументов.

С другой стороны, если ваш Объект не является компонентом, см. Обсуждение этого на Как автоматически связать компонент внутри класса, который не является настроенным компонентом? . Код выглядит примерно так

        context.getAutowireCapableBeanFactory().autowireBean(this);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...