Prefácio
No desenvolvimento normal de Java, os programadores precisam confiar em outras classes em uma determinada classe, para que eles geralmente usam new em novas classes e depois chamam instâncias da classe. O problema com esse desenvolvimento é que new instâncias de classe não são fáceis de gerenciar. A Spring propõe a idéia de injeção de dependência, ou seja, as classes de dependência não são instanciadas pelos programadores, mas ajude -nos new instâncias através de contêineres de mola e injetar instâncias na classe que precisam do objeto. Outro termo para injeção de dependência é "inversão de controle". O entendimento comum é: geralmente nós, uma new instância, e o controle desta instância é o nosso programador, e a inversão de controle significa que o trabalho da new instância não é feito por nós programadores, mas é entregue ao recipiente da mola.
Existem quatro maneiras de injetar dependência na primavera
1. Defina a injeção (geralmente também chamada de injeção de atributo)
2. Injeção do construtor
3. Injeção de interface (isso basicamente não é usado agora)
4. Injeção de anotação (@Autowire)
Abaixo está um exemplo do uso da injeção de método de conjunto, injeção de construtor e injeção de anotação.
1. Definir injeção de método (injeção de atributo)
Userdao.java
classe pública userdao {public void insertUser (usuário do usuário) {// lógica específica omitida}}UserService.java
interface pública UserService {void InsertUser (usuário do usuário);}UserServiceImpl.java
classe pública UserServiceImpl implementa UserService {privado userdao userdao; public void setUserdao (userdao userdao) {this.userdao = userdao; } public void insertUser (usuário do usuário) {userdao.insert (usuário); }}Arquivo de configuração da primavera
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/Context http://www.springframework.org/schema/Context/spring-context-2.xsd "> <!-omiti um pouco de escrita não relacionada- <propriedade name = "userdao" ref = "userdao"> </shean> </beans>
O exposto acima pode injetar Userdao no UserServiceImpl
2. Injeção do construtor
User.java
Public class Usuário {// Para simplificar, escreva dois atributos Nome da String Private; idade inteira privada; // omita o método getter/setter sobre nome, usuário público (nome da string, int age) {this.name = name; this.age = idade; }}Agora use o arquivo de configuração da mola para injetar o objeto do usuário
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/Context http://www.springframework.org/schema/Context/spring-context-2.5.xsd "> <!-omiti um pouco de escrita não relacionada- Construtores com o mesmo número de parâmetros)-> <construtor-arg type = "java.lang.string" index = "0" value = "zhangsan"/> <construtor-arg type = "java.lang.integer" index = "1" Value "20> </bean> </beans>
Os itens acima podem injetar valores de propriedade no objeto do usuário. Obviamente, se você deseja injetar o exemplo usando o método Set, ele é realmente o mesmo. É necessário ter um construtor no UserServiceImpl , e os parâmetros formais são Userdao, portanto, não há necessidade de setter .
Então a redação do arquivo de configuração da primavera deve ser alterada para isso
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/Context http://www.springframework.org/schema/Context/spring-context-2.xsd "> <!-omiti um omite alguma configuração não relacionada-<bean idi)" <!-Subscrito dos parâmetros do construtor inicia a partir de 0 (evite vários construtores com o mesmo número de parâmetros)-> <Construtor-arg index = "0" ref = "userdao"> </shean> </sheans>
Isso também pode alcançar o efeito alcançado pela injeção de método de conjunto acima
3. Injeção de anotação
Eu nunca tentei se ele pode ser @Autowire com sucesso sem adicionar @Component,@Service,@Controller , etc. a essas classes. No entanto, é recomendável adicionar anotações correspondentes ao nível correspondente. No exemplo a seguir, o userdao pertence à camada do módulo. Na primavera, você pode usar a anotação @Component .
Userdao.java
@ComPonentPublic class Userdao {public void InsertUser (usuário do usuário) {// Lógica específica omitida}}UserService.java
interface pública UserService {void InsertUser (usuário do usuário);}UserServiceImpl.java
// Introduzir o pacote de primavera correspondente @ServicePublic Class UserServiceImpl implementa UserService {@AUTOWire privado userdao userdao; public void insertUser (usuário do usuário) {userdao.insert (usuário); }}Arquivo de configuração correspondente da primavera
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http:/wwww.w3 xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/Context/spring-context-2.5.xsd "> <!-omitir um pacote não relacionado. No desenvolvimento real, você pode escanear com base em pacotes que envolvem componentes de anotação-> <Contexto: componente-cacan-package = "*"> <!-Ligue a varredura de componentes-> </context: component-scan> <Contexto: Annotation-Config> <!-Turn On Anotor-> </context: <notation-config> bean <! id = "UserService"/> </ Beans>
No entanto, durante o processo de desenvolvimento, a injeção do método do conjunto é ativada e a injeção de anotação é ativada, a mola escolherá primeiro a injeção de conjunto, para que não se esqueça de fornecer o método de conjunto correspondente, caso contrário, falhará.
Através da comparação, a injeção de anotação é muito mais conveniente que as outras injeções e menos arquivos de código e configuração são gravados. Recomenda -se usar a injeção de anotação durante o processo de desenvolvimento.
Resumir
O exposto acima é uma introdução completa a vários métodos de injeção de dependência na primavera. Espero que possa ajudá -lo em seu estudo ou trabalho. Se você tiver alguma dúvida, também pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.