Digamos que temos uma aula:
public class MyClass {
@Autowired private AnotherBean anotherBean;
}
Em seguida, criamos um objeto dessa classe (ou alguma outra estrutura criou a instância dessa classe).
MyClass obj = new MyClass();
Ainda é possível injetar as dependências? Algo como:
applicationContext.injectDependencies(obj);
(Acho que o Google Guice tem algo assim)
java
spring
dependency-injection
Igor Mukhin
fonte
fonte
code
private @Autowired AnotherBean bean; public void doStuff () {Objeto MyBean = novo MyBean (bean); }code
. Parece ser como com todas essas anotações pessoas ficam realmente confuso e simplesmente não usam o padrão básico que estavam no SDK Java desde o dia 1. :(Você também pode marcar seu MyClass com a anotação @Configurable:
Então, no momento da criação, ele injeta automaticamente suas dependências. Você também deve ter
<context:spring-configured/>
em seu contexto de aplicativo xml.fonte
<context:spring-configured/>
?Acabei de ter a mesma necessidade e, no meu caso, já era a lógica dentro da classe java não gerenciável do Spring que tinha acesso
ApplicationContext
. Inspirado por scaffman. Resolvido por:fonte
Eu queria compartilhar minha solução que segue a
@Configurable
abordagembriefly
mencionada na resposta @ glaz666 porqueMinha configuração
Spring Neo4j & Aop starts
(que é irrelevante de qualquer maneira)Spring Boot
estiver pronto usando a@Configurable
abordagem (usandoApplicationRunner
)Passos
Eu precisava seguir as etapas abaixo para fazê-lo funcionar
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE, dependencyCheck = false)
a ser colocado em cima do seuBean
que deve ser instanciado manualmente. No meu caso, oBean
que deve ser instanciado manualmente possui@Autowired
serviços, portanto, os adereços para a anotação acima.XXXApplicaiton.java
(ou o arquivo que é anotado com@SpringBootApplication
) com o@EnableSpringConfigured
e@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
compile('org.springframework.boot:spring-boot-starter-aop')
ecompile('org.springframework:spring-aspects:5.0.7.RELEASE')
Bean
que está anotado em@Configurable
qualquer lugar e suas dependências devem ser conectadas automaticamente.* No que diz respeito ao ponto 3 acima, estou ciente de que o
org.springframework.boot:spring-boot-starter-aop
puxa transitivamente ospring-aop
(como mostrado aqui a seguir ), mas, no meu caso, o Eclipse falhou ao resolver as@EnableSpringConfigured
anotações, por isso adicionei explicitamente aspring-aop
dependência além do iniciador. Se você enfrentar o mesmo problema, apenas declare a dependência ou aventure-se a descobrirorg.springframework.context.annotation.aspect.*
não está disponívelfonte