#spring
#spring
Вопрос:
У меня есть класс, подобный
class A {
@Autowired
B b;
}
A a = new A()
Я обнаружил, что b
это не автозаполнение
Я уже сделал <context:component-scan base-package="*">
, чего-нибудь еще не хватает?
Комментарии:
1. есть ли какие-либо примечания к определению класса B?
Ответ №1:
Вы должны получить компонент из bean factory, вместо того, чтобы создавать экземпляр напрямую.
Например, вот как это сделать с помощью аннотаций. Во-первых, вам нужно добавить немного больше к вашему объявлению вашего класса:
// Annotate to declare this as a bean, not just a POJO
@Component
class A {
@Autowired
B b;
}
Далее вы делаете это один раз для каждого приложения:
AnnotationConfigApplicationContext factory =
new AnnotationConfigApplicationContext();
factory.register(A.class);
factory.register(B.class);
// Plus any other classes to register, or use scan(packages...) method
factory.refresh();
Наконец, теперь вы можете получать экземпляры компонента:
// Instead of: new A()
A a = factory.getBean(A.class);
Комментарии:
1. Я отмечаю, что вы также используете конфигурацию XML. Все в порядке; просто получите контекст приложения (который также является bean factory) и используйте его
getBean
методы.
Ответ №2:
Spring автоматически подключит A
объект только в том случае, если Spring создает его экземпляр как компонент. если вы создаете свой собственный экземпляр, Spring ничего об этом не знает, поэтому ничего не подключается автоматически.