Notas de estudo Spring: Realize o IOC e DI da estrutura Spring com base em dois métodos de configuração de arquivos XML e anotações

Primeiro abra o IntelliJ IDEA, crie uma lição de primavera do projeto Maven, exclua a pasta src e mantenha apenas o arquivo pom correspondente às dependências do maven. Este projeto é usado como projeto pai e o nó <packaging> é adicionado ao arquivo pom . O conteúdo do nó é pom, indicando a engenharia agregada da construção, conforme segue:

 <groupId>com.winning</groupId>
  <artifactId>spring-lesson</artifactId>
  <version>1.0-SNAPSHOT</version>
  <!--表示构建聚合工程-->
  <packaging>pom</packaging>

Adicione um novo módulo ao projeto pai. O nome do módulo é day1-spring. Primeiro, introduza as dependências relacionadas ao spring, que são principalmente dependências do contexto do spring, como segue:

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
</dependency>

Em seguida, adicione um pacote: com.winning.dao, adicione uma interface TestDAO, que possui um método hello():

package com.winning.dao;

public interface TestDAO {
    void hello();
}
package com.winning.dao;

import org.springframework.stereotype.Repository;

@Repository
public class TestDAOImpl implements TestDAO {
    @Override
    public void hello() {
        System.out.println("-->dao层TestDAOImpl执行hello()方法!");
    }
}

Continue adicionando pacotes, com.winning.service, e crie uma interface TestService, que possui um método CallDaoMethod:

package com.winning.service;

import com.winning.dao.TestDAO;

public interface TestService {

    void CallDaoMethod();
    void  setTestDAO(TestDAO testDAO);
}
@Service
public class TestServiceImpl implements TestService {

    @Autowired // 把spring容器中TestDAO类型实例注入到testDAO属性中
    TestDAO testDao;

    @Override
    public void CallDaoMethod() {

        System.out.println("-->service层TestServiceImpl执行CallDaoMethod()方法!");
        testDao.hello();
    }

    @Override
    public void setTestDAO(TestDAO testDAO) {
        this.testDao = testDAO;
    }

}

No código da camada de serviço acima, há uma propriedade do tipo TestDAO. Para garantir que essa propriedade possa ser injetada, um método set deve ser fornecido para a propriedade.


A seguir, vamos implementar o gerenciamento de objetos java bean por meio do arquivo de configuração xml e adicionar um arquivo applicationContext.xml na pasta de recursos

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="testDao" class="com.winning.dao.TestDAOImpl" />
    <bean id="testService" class="com.winning.service.TestServiceImpl">
        <!--配置属性的依赖注入,前提是属性有set方法-->
        <property name="TestDAO" ref="testDao" />
    </bean>
</beans>

Deve-se notar aqui que o id deve ser único, e o nó da classe representa o caminho da classe, ou seja, o nome do pacote + nome da classe. Ao mesmo tempo, quando o objeto da camada DAO é injetado na camada de serviço, usamos a injeção de atributos, e o nó ref corresponde ao nome do atributo.


A seguir vamos testar, carregar nosso arquivo de configuração xml através da classe ClassPathXmlApplicationContext, o nome do parâmetro é o nome do arquivo xml, conforme segue:

Contexto ApplicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

Abaixo usamos este método para obter os objetos da camada DAO e da camada de serviço, respectivamente

//通过xml文件管理java bean对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContext.xml");

        Object testDaoObj = context.getBean("testDao");
        System.out.println( testDaoObj );

        //TestService.class,表示返回指定Bean类型,无需用Object接收
        TestService testService = context.getBean("testService", TestService.class);
        testService.CallDaoMethod();

Execute-o para ver o resultado:

Foi um sucesso e o espaço é limitado. Vamos compartilhar o método de implementação da anotação na próxima vez. 

Acho que você gosta

Origin blog.csdn.net/HaoNanEr1989/article/details/115427664
Recomendado
Clasificación