Chamada de interface Spring Day22 e injeção IOC alcançam efeito de desacoplamento

Programação Orientada à Interface do Spring - Criar Projeto da Web

  • (1) Criar projeto (projeto Maven)
  • (2) Criar Módulo (Maven webapp)
  • (3) Defina os diretórios java, reousrces e test
  • (4) A configuração depende de pom.xml
<dependencies>
        <!--spring依赖 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.9.RELEASE</version>
        </dependency>

        <!--日志包-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

Princípio de programação orientado a interface Spring

  • (1) Definição da interface Interface
    da classe de negócios com.xxx.service. IXxxService
    Interface Dao com.xxx.dao.IXxxDao
  • (2) Classe de implementação
    com.xxx.service.impl. XxxServiceImpl
    Com.xxx.dao.impl.XxxDaoImpl
  • (3) Uma interface tem várias classes de implementação. 使用接口调用,将来更换实现类时,代码耦合度更低
    Método de julgamento: os 删除法
    objetos da classe de implementação futura serão gerenciados pelo Spring, e as variáveis ​​de membro serão usadas依赖注入

Implementação de programação orientada a interface Spring

  • (1) PersonServiceImplTest
  • (2) IPersonService
  • (3) PersonServiceImpl
  • (4) IPersonDao
  • (5) PersonDaoImpl
  • (6) Varredura de anotação Spring
  • (7) Spring DI

变量等号左边使用接口调用方法,加上 spring的getBean或者注解注入,可以达成实现类的解耦。

PersonServiceImplTest

public class PersonServiceImplTest {
    
    
    @Test
    public void login() {
    
    
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        IPersonService service = context.getBean("PersonServiceImpl", PersonServiceImpl.class);
        service.login();
    }
}

IPersonService

public interface IPersonService {
    
    
    public void login();
}

PersonServiceImpl

@Service
public class PersonServiceImpl implements IService {
    
    
    //Autowired:Spring会自动创建实现类对象,并且将实现类对象赋值给dao
    @Autowired
    private IPersonDao dao;
    @Override
    public void login() {
    
    
        System.out.println("Service调用Dao层代码");
        dao.login();
    }
}

IPersonDao

public interface IPersonDao {
    
    
    public void login();
}

PersonDaoImpl

@Repository
public class PersonDaoImpl implements IPersonDao {
    
    
    @Override
    public void login() {
    
    
        System.out.println("用户登录-进行数据库查询!");
    }
}

Varredura de anotação de primavera

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--进行包扫描-->
    <context:component-scan base-package="cn.cyl"/>
</beans>

Programação orientada a interface Spring - especifique a classe de implementação

  • (1) @Autowired: Spring criará automaticamente o objeto de classe de implementação e atribuirá o objeto de classe de implementação ao dao.
    Se houver apenas uma classe de implementação para esta interface no projeto, você pode usar Autowired.
    No entanto, a interface tem duas ou mais classes de implementação. Lance uma exceção
    como: PersonDaoImpl StudentDaoImp
  • (2) @Qualifier: Você pode especificar manualmente qual objeto de classe de implementação é atribuído à interface IPersonDao
  • (3) Os dois devem ser usados ​​juntos
public class A{
    
    
	@Autowired
	@Qualifier("id值")  默认类名首字母小写
 	private B b;
}
  • Exemplo

Adicione uma classe de implementação de IPersonDao

@Repository
public class StudentDaoImpl implements IPersonDao {
    
    
    @Override
    public void login() {
    
    
        System.out.println("学生登录-进行数据库查询!");
    }
}

É necessário adicionar @Qualifierqual classe de implementação PersonServiceImpl é atribuída de acordo com o id do bean

@Service
public class PersonServiceImpl implements IService {
    
    
    //Autowired:Spring会自动创建实现类对象,并且将实现类对象赋值给dao
    @Autowired
    //Qualifier:可以手动指定将哪一个实现类的对象赋值给IDao接口
    @Qualifier("PersonDaoImpl")
    private IPersonDao dao;
    @Override
    public void login() {
    
    
        System.out.println("Service调用Dao层代码");
        dao.login();
    }
}

Acho que você gosta

Origin blog.csdn.net/qq_43639081/article/details/109117731
Recomendado
Clasificación