Revisão da primavera

Insira a descrição da imagem aqui

  • Site oficial: http://spring.io/
  • Endereço oficial para download: https://repo.spring.io/libs-release-local/org/springframework/spring/
  • GitHub: https://github.com/spring-projects
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.4</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.4</version>
</dependency>

vantagem:

  • 1.Spring é uma estrutura livre e de código aberto, contêiner.
  • 2.Spring é uma estrutura leve, não intrusiva.
  • 3. Inversão de controle IoC, Aop face a face
  • 4. Suporte para coisas, suporte para estruturas

Composição : O framework Spring é uma arquitetura em camadas que consiste em 7 módulos bem definidos. O módulo Spring é construído no contêiner principal, que define a maneira de criar, configurar e gerenciar beans.

Insira a descrição da imagem aqui

  • Contêiner principal : O contêiner principal fornece as funções básicas da estrutura Spring. O principal componente do contêiner principal é BeanFactory, que é a realização do padrão de fábrica. BeanFactory usa o modelo Inversion of Control (IOC) para separar as especificações de configuração e dependência do aplicativo do código do aplicativo real.

  • Contexto do Spring : O contexto do Spring é um arquivo de configuração que fornece informações de contexto para a estrutura do Spring. O contexto Spring inclui serviços corporativos como JNDI, EJB, e-mail, internacionalização, verificação e funções de agendamento.

  • Spring AOP : Por meio de recursos de gerenciamento de configuração, o módulo Spring AOP integra diretamente funções de programação orientadas a aspectos no framework Spring. Portanto, você pode facilmente fazer com que a estrutura do Spring gerencie qualquer objeto que ofereça suporte a AOP. O módulo Spring AOP fornece serviços de gerenciamento de transações para objetos em aplicativos baseados em Spring. Usando Spring AOP, você pode integrar o gerenciamento de transações declarativas em seu aplicativo sem depender de componentes.

  • Spring DAO : A camada de abstração JDBC DAO fornece uma hierarquia de exceção significativa que pode ser usada para gerenciar o tratamento de exceções e mensagens de erro lançadas por diferentes fornecedores de banco de dados. A hierarquia de exceção simplifica o tratamento de erros e reduz muito a quantidade de código de exceção que precisa ser escrito (como abrir e fechar conexões). As exceções orientadas a JDBC do Spring DAO seguem a hierarquia de exceção geral do DAO.

  • Spring ORM : Spring framework insere vários frameworks ORM, fornecendo assim ferramentas relacionais de objetos ORM, incluindo JDO, Hibernate e iBatis SQL Map. Todos estes seguem a transação geral do Spring e a hierarquia de exceção DAO.

  • Módulo Spring Web : O módulo de contexto da Web é construído na parte superior do módulo de contexto do aplicativo para fornecer contexto para aplicativos baseados na Web. Portanto, a estrutura do Spring oferece suporte à integração com Jakarta Struts. O módulo da web também simplifica o trabalho de processamento de solicitações de várias partes e de parâmetros de solicitação de vinculação a objetos de domínio.

  • Estrutura Spring MVC : a estrutura MVC é uma implementação MVC com todos os recursos para a construção de aplicativos da Web. Por meio da interface de estratégia, o framework MVC torna-se altamente configurável.O MVC acomoda um grande número de tecnologias de visualização, incluindo JSP, Velocity, Tiles, iText e POI.
    Insira a descrição da imagem aqui

Spring Boot 与 Spring Cloud

  • Spring Boot
    1), um conjunto de andaimes de configuração rápida,
    2), pode desenvolver rapidamente um único microsserviço baseado no Spring Boot;
    3), a convenção é maior do que a configuração!
  • Spring Cloud
    1), Spring Cloud é baseado em Spring Boot;
    2), Spring Boot se concentra em um único indivíduo de microsserviço que é rápido e fácil de integrar,
    3), Spring Cloud se concentra na estrutura de governança de serviço global;
    4), Spring Boot usa Restrições são melhores do que o conceito de configuração. Muitos esquemas de integração foram selecionados para você. Você pode configurá-lo sem configuração?
    5) Uma grande parte do Spring Cloud é implementado com base no Spring Boot. Spring Boot pode sair do Spring
    Cloud e usar o desenvolvimento projetos de forma independente. Mas Spring Cloud é inseparável do Spring Boot, que é um relacionamento de dependência.
    6) SpringBoot desempenha um papel na conexão do acima e do seguinte no SpringClound.Se você quiser aprender SpringCloud, você deve aprender SpringBoot.

Derivação da teoria IoC

No passado, escrevíamos processos de negócios e criamos um maven sem suporte da web, o que não é diferente de escrever código java.

1. Interface UserDao
2. Classe de implementação UserDaoImpl
3. Interface de
negócios UserService 4. Classe de implementação de negócios UserServiceImpl

//UserDao
public interface UserDao {
    void getUser();
}
//UserDaoImpl
public class UserDaoImpl implements UserDao{
    @Override
    public void getUser() {
        System.out.println("默认获取用户的数据");
    }
}
//UserService
public interface UserService {
    void getUser();
}
/**
 * 业务层调dao层了,我要用它。  组合的概念,我们要用它就直接new出来就行
 */
//UserviceImpl
public class UserServiceImpl implements UserService{

//    private UserDao userDao = new UserDaoImpl();

    private  UserDao userDao = new UserDaoMysqlImpl();

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
//测试
public class MyTest {
    public static void main(String[] args) {

        // 实际调用的是业务层,dao层他们不需要接触
        UserServiceImpl userService = new UserServiceImpl();

        userService.getUser();

    }
}
/**
 * 但是如果我们在增加一个实现,那客户就要改service代码,如果用户又要增加实现,又要改代码,不方便,
 */
//新增实现类
public class UserDaoMysqlImpl implements UserDao{

    @Override
    public void getUser() {
        System.out.println("Mysql获取用户数据");
    }
}

A segunda forma: antes, usávamos a nova forma, e quando é difícil escrever, usamos a forma set () , da seguinte maneira:

/**
 * 业务层调dao层了,我要用它。  组合的概念,我们要用它就直接new出来就行
 */
public class UserServiceImpl implements UserService{

    //private UserDao userDao = new UserDaoImpl();
    // 第一种
    // private  UserDao userDao = new UserDaoMysqlImpl();

    //第二种实现方式
    private UserDao userDao;
    // 使用set进行动态实现值的注入
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
//第二种,直接使用set
public class MyTest {
    public static void main(String[] args) {

        // 实际调用的是业务层,dao层他们不需要接触
        // UserServiceImpl userService = new UserServiceImpl();

        //第二种方式:set()
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(new UserDaoMysqlImpl());

        userService.getUser();

    }
}

Em nosso negócio anterior, as necessidades do usuário podem afetar nosso código original e precisamos modificar a implementação do código original de acordo com as necessidades do usuário. Se a quantidade de código do usuário for muito grande, o custo da modificação uma vez é muito caro.

  • Antes, o programa estava criando objetos ativamente e o controle estava nas mãos do programador
  • Depois de usar a injeção definida, o programa não está mais ativo, mas se torna passivo.

Esse tipo de pensamento resolve essencialmente o problema, e nós, programadores, não gerenciamos mais a criação de objetos.

COI

Inversão de controle IoC (Inversão de controle) é uma ideia de design. DI (injeção de dependência) é uma maneira de implementar IoC. Em programas sem IoC, usamos a programação orientada a objetos, a criação de objetos e as dependências entre objetos Completamente difícil codificado no programa, a criação do objeto é controlada pelo próprio programa, e a criação do objeto é transferida para um terceiro após a inversão de controle. Eu pessoalmente acho que a chamada inversão de controle é: o caminho de obter objetos dependentes é revertido.

Inversão de controle é uma forma de produzir ou obter objetos específicos por meio de descrição (XML ou anotação) e de terceiros . É o contêiner IoC que implementa a inversão de controle no Spring e seu método de implementação é Dependency Injection (DI).
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

3. Primeiro projeto Spring da HelloSpring

Spring Quick Start
Injetar atributos de tipo comum por meio do método set e criar objetos

Criar projeto, classe pojo

public class Hello {

    private String str;

    public String getStr(){
        return str;
    }
    public void setStr(String str){
        this.str = str;
    }

    @Override
    public String toString(){
        return "Hello{" +
                "str='" + str + '\'' +
                '}';
    }
}

Beans.xml é applicationcontext.xml, e o próprio framework vai para o site oficial para encontrá-lo, e o teste não faz sentido.

<?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">

    <!--1、bean就是java对象 , 由Spring创建和管理
        2、使用spring来创建对象,在Spring这些都称为Bean
        3、对象也new好了,我们可以直接使用它了

        类型 变量名 = new 类型();
        Hello hello = new Hello();

        id = 变量名
        class = new 的对象
        property 相当于给对象中的属性设置一个值
        -->
    <bean id="hello" class="com.fengbin.pojo.Hello">
        <!-- 此处调用setName方法为name属性赋值-->
        <property name="str" value="Spring"/>
    </bean>
</beans>

Vamos criar um teste MyTest

// 测试
public class MyTest {
    public static void main(String[] args) {
        /*  官网中配置文件是可以配置多个的
            ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
        */
        // 获取spring的上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        // 我们的对象现在都在Spring中的管理了,我们要使用,直接去里面取出来就可以了
        Hello hello = (Hello) context.getBean("hello");//我们现在可没有new出来hello
        System.out.println( hello.toString());
    }
}

Pensamento:

Quem criou o objeto Hello? O objeto hello foi criado pelo Spring.

Como são definidas as propriedades do objeto Hello? As propriedades do objeto hello são definidas pelo contêiner Spring.

Este processo é chamado de inversão de controle:

Controle: Quem controla a criação dos objetos, os objetos das aplicações tradicionais são criados sob o controle do próprio programa, após usar o Spring, os objetos são criados pelo Spring

Reversão: O próprio programa não cria um objeto, mas se torna um objeto receptor passivo.

Injeção de dependência: usa o método set para injetar. O núcleo é o método set. Se o método set () da classe for removido, iremos relatar um erro ao configurar a tag <bean , como segue:
Insira a descrição da imagem aqui

IOC é um tipo de ideia de programação, da programação ativa à recepção passiva
é que se for hospedado na primavera, haverá alguns sinais, como segue, clique para pular, podemos usá-lo diretamente; se não houver folha, significa que o feijão não foi registrado,Insira a descrição da imagem aqui

Plano de modificação 1:
adicionamos um arquivo de configuração do Spring beans.xml no projeto spring-01-ioc1, da seguinte maneira:

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="mysqlImpl" class="com.fengbin.dao.UserDaoMysqlImpl"></bean>

    <bean id="UserServiceImpl" class="com.fengbin.service.UserServiceImpl">
        <!-- 普通字段我们用value,ref引向一个bean,就是我们要引向spring容器中创建好的对象
             ref : 引用spring容器中创建好的对象
             value: 具体的值,基本数据类型
        -->
        <property name="userDao" ref="mysqlImpl"></property>
    </bean>

</beans>

Desta forma, o teste original não precisa do novo objeto

// 原先的测试如下: 
public class MyTest {
    public static void main(String[] args) {

        // 实际调用的是业务层,dao层他们不需要接触
        // UserServiceImpl userService = new UserServiceImpl();

        //第二种方式:set()
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(new UserDaoMysqlImpl());

        userService.getUser();

    }
}

É para isso que queremos mudar. A operação direta é a seguinte:

Acho que você gosta

Origin blog.csdn.net/Anna_Liqi/article/details/114626502
Recomendado
Clasificación