一、 @SpringBootApplication
Entre SpringBoot
as classes de inicialização criadas automaticamente pelo framework para nós, @SpringBootApplication
as tags de anotação são usadas para modificar a classe de inicialização.
@SpringBootApplication
A tag de anotação é na verdade uma tag de anotação composta, incluindo @EnableAutoConfiguration
, @ComponentScan
geralmente usada na classe principal
anotação | ilustrar |
---|---|
@SpringBootApplication | Usado para declarar classes de inicialização para modificação |
@EnableAutoConfiguration | É springboot a anotação central para configuração automática, por meio da qual spring a aplicação precisa ser bean injetada no container |
@ComponentScan | Ele é usado para verificar automaticamente as classes identificadas por anotações e gerá-las ioc no contêiner bean . O escopo de verificação padrão são @ComponentScan as classes no pacote de classe de configuração e subpacotes onde as anotações estão localizadas |
Dois, @Configuration, @Bean
anotação | ilustrar |
---|---|
@Configuração | Agir na classe para configurar spring o contêiner (contexto do aplicativo), o que equivale a usar a classe como um arquivo spring de configuraçãoxml |
@Feijão | Crie bean um objeto e adicione-o ao container, agindo sobre o método |
Exemplo:
SSM
Durante a integração do framework nativo , se quisermos IOC
adicionar um objeto personalizado ao container, o que precisamos fazer é adicionar a declaração de conteúdo da seguinte tag
abaixo Spring
da tag heel do arquivo de configuração usado pelo framework:
<bean id="user" class="com.qf.testspringboot.pojo.User">
<property name="id" value="1"/>
<property name="username" value="张三"/>
<property name="age" value="22"/>
</bean>
Mas na SpringBoot
estrutura, podemos IOC
injetar objetos personalizados diretamente no contêiner criando e retornando objetos Java.
Este processo depende de @Configuration
tags de anotação e @Bean
tags de anotação.
Primeiro preparamos uma User
aula:
@Data //记得要导入Lombok相关的依赖
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String username;
private Integer age;
}
Em seguida, crie uma UserConfiguration
classe e use @Configuration
a tag de anotação para esta classe para declarar que esta classe é uma classe de configuração:
@Configuration
public class UserConfiguration {
}
Crie um método nesta classe, o valor de retorno do método é User
tipo e o nome do método é IOC
o nome do objeto injetado no contêiner e use @Bean
o rótulo de anotação para este método:
@Configuration
public class UserConfiguration {
@Bean
public User user() {
/*
下列代码等价于:
<bean id="user" class="com.qf.testspringboot.pojo.User">
<property name="id" value="1"/>
<property name="username" value="张三"/>
<property name="age" value="22"/>
</bean>
方法的返回值数据类型等价于<bean>标签中的class属性取值
方法的方法名等价于<bean>标签中的id属性取值
*/
User user = new User(1, "张三", 22);
return user;
}
}
Neste ponto, o fluxo lógico para SpringBoot
o framework escanear e IOC
injetar objetos no container é:
- Quando o framework SpringBoot escaneia
@Configuration
o tipo decorado com tags de anotação, ele irá considerar esta classe como uma classe de configuração; @Bean
O objeto de valor de retorno do método decorado com tags de anotação na classe de configuração será injetado automaticamenteIOC
no contêiner para armazenamento;@Bean
O tipo de dado do valor de retorno do método de decoração do tag de anotação é equivalente ao valor do atributo do tagclass
;- Por padrão,
@Bean
o nome do método decorado com a tag de anotação é equivalente aoid
valor do atributo da tag, ou seja, oIOC
nome do objeto no contêiner.
Dessa forma, podemos XML
facilmente IOC
injetar objetos Java personalizados no contêiner sem usar arquivos de configuração.
3. @AutoWired
@Autowired
Por padrão, ele é montado por tipo, que geralmente é usado em classes de implementação de camada de negócios e classes de implementação de camada de persistência
Exemplo:
Na TestController
classe, @Autowired
um objeto é injetado automaticamente através da tag de anotação User
, e quando test
o método é acessado, o User
objeto é impresso:
@Controller //SpringMVC当中的注解标签都还能用
public class TestController {
@Autowired
private User user; //自动注入自定义的User对象
@RequestMapping("/test")
@ResponseBody
public String test() {
System.out.println(user); //打印这个User对象
return "Hello SpringBoot!";
}
}
O resultado da execução do programa ao acessar test
o método:
四、@Service、@Controller、@Repository、@Component
anotação | ilustrar |
---|---|
@Serviço | Para a camada de negócios, a camada de lógica de negócios service é injetada spring no contêiner |
@Controlador | recipiente controller de injeção de camada de controlespring |
@Repositório | Contêiner dao de injeção de camada de persistênciaspring |
@Componente | recipiente domain de injeção comumspring |
五、@ResponseBody、@RestController
anotação | ilustrar |
---|---|
@ResponseBody | Aja no método ou classe, deixe o resultado de retorno do método ser gravado diretamente em HTTP response body , sem passar pelo analisador de visualização, e os dados retornados serão exibidos diretamente na página. |
@RestController | É uma combinação de @Controller e , atuando na classe, o efeito é igual a somar e @ResponseBody na classe@ResponseBody @Controller |
六、@RequestMapping、@GetMapping、@PostMapping
anotação | ilustrar |
---|---|
@RequestMapping | url Use esta anotação para acessar via configuração , que pode get ser ou postar |
@GetMapping | Use esta anotação para url acessar por meio da configuração e limitar get o método de solicitação |
@PostMapping | Use esta anotação para url acessar por meio da configuração e limitar post o método de solicitação |
七、@RequestParam、@RequestBody
anotação | ilustrar |
---|---|
@RequestParam | É usado principalmente para receber url? os seguintes parâmetros get ou post solicitações, desde que haja parâmetros por trás, url? os parâmetros correspondentes podem ser obtidos |
@RequestBody | Essa anotação é utilizada para obter os dados do corpo da requisição ( body ), get não há corpo da requisição, então geralmente é utilizada para post requisições |
- Em
GET
requisições, você não pode usar@RequestBody
- Na requisição,
POST
pode ser usado@RequestBody
e@RequestParam
, mas se for usado@RequestBody
, a configuração de conversão de parâmetros deve ser unificada. - Pode usar vários
@RequestParam
dados de busca,@RequestBody
não