, наконец, я разобрался, поставив
abi {
enable false
reset()
include 'x86', 'armeabi-v7a'
universalApk true
}
и multiDexEnabled true
, но я не знаю, устранила ли эта проблема или просто проигнорировала ошибку
Вы можете сделать это, используя метод autowireBean()
в AutowireCapableBeanFactory
. Вы передаете ему произвольный объект, а Spring будет обрабатывать его, как то, что он сам создал, и будет применять различные куски и куски автоувеличивания.
Чтобы получить доступ к AutowireCapableBeanFactory
, просто используйте autwire, что:
private @Autowired AutowireCapableBeanFactory beanFactory;
public void doStuff() {
MyBean obj = new MyBean();
beanFactory.autowireBean(obj);
// obj will now have its dependencies autowired.
}
Вы также можете пометить свой MyClass @Configurable аннотацией:
@Configurable
public class MyClass {
@Autowired private AnotherClass instance
}
Затем во время создания он автоматически вводит свои зависимости. Вы также должны иметь <context:spring-configured/>
в вашем контексте приложения xml.
Не обойтись без обходных путей, так как Spring ничего не знает об этом экземпляре.
Реальный вопрос: зачем вы создаете экземпляры класса, которые вы хотите использовать вложенные вручную, а не позволяете Spring управлять им? ? Почему класс, использующий MyClass
, не вставляет MyClass
в него?
Я хотел поделиться своим решением, которое следует за подходом @Configurable
как briefly
, упомянутым в @ glaz666 answer , потому что
Spring Neo4j & Aop starts
(что в любом случае не имеет значения) Spring Boot
готов с использованием подхода @Configurable
(с использованием ApplicationRunner
) Мне нужно было выполнить следующие шаги, чтобы заставить его работать
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
поверх вашего Bean
, который должен быть создан вручную. В моем случае Bean
, который должен быть создан вручную, имеют @Autowired
сервисы, следовательно, реквизиты выше аннотации. XXXApplicaiton.java
Spring Boot (или файл, аннотированный с помощью @SpringBootApplication
) с помощью @EnableSpringConfigured
и @EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
и compile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
, который аннотируется с помощью @Configurable
где угодно и его зависимости, должен быть autowired. * Что касается точки № 3 выше, я знаю, что org.springframework.boot:spring-boot-starter-aop
транзитивно тянет spring-aop
(как показано здесь mavencentral ), но в в моем случае Eclipse не удалось разрешить аннотации @EnableSpringConfigured
, поэтому я явно добавил зависимость spring-aop
в дополнение к стартеру. Если вы сталкиваетесь с той же проблемой, просто объявляйте зависимость или отправляйтесь в приключение по выяснению
org.springframework.context.annotation.aspect.*
недоступен Просто получил такую же потребность, и в моем случае это уже была логика внутри нестандартного класса java, который имел доступ к ApplicationContext
. Вдохновленный скиффом. Решено:
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
factory.autowireBean(manuallyCreatedInstance);