SpringBoot注解学习笔记

发表于 2019-08-29 15:28:18
阅读 25

介绍

介绍

使用

注解基础

  • @Bean - 相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

  • @Autowired - 自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

  • @Qualifier - 当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:

  • @Configuration - 将一个类注册到Bean里,给其他程序使用

  • @ConfigurationProperties - 注册Bean类的时候,设置读取配置文件参数的参数

  • @PropertySource - 注册Bean类的时候,设置读取配置文件的路径(非默认 application.properties 时候使用)

注解使用

自定义application.properties参数

我们使用 application.properties 设置自定义参数

设置自定义参数

  • 在 application.properties 内设置自定义参数

myvars.url=http://tongfu.net/

建立Bean类

  • 使用注解 @Configuration 声明一个类添加到 Bean 里

  • 在类内建立与 application.properties 里名称相同的属性变量

  • 在类内建立getter/setter方法,对应每一个属性变量

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.beans.factory.annotation.Qualifier;

@Configuration
@PropertySource(value = "application.properties")
@ConfigurationProperties(prefix = "myvars")
public class MyVarsController {
	
	private String url;

	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
}

调用Bean类的类

  • 在调用的类内建立Bean类类型的属性变量,并且加上 @Autowired 注解

  • 在调用的类的方法里就可以访问Bean类类型的属性变量的属性和方法了

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Autowired;

@RestController
public class TestController {

    @Autowired
    MyVarsController mvc;
	
    @RequestMapping("/test")
    public Test dealTest(@RequestParam(value="name", defaultValue="World") String name) {
        Test test = new Test(mvc);
        
        return test;
    }
}

注意事项

  • 注入Bean类的类不能是通过 new 产生的,否则以Bean类注入的属性变量则会变为 null(这个坑了笔者一天)

  • 所有的自动注入都应该在控制器类内完成,然后再通过传递参数的方式传给模型,视图等等(参看上面的示例)

  • Bean类本身也可以注入其他Bean类,例如:我们建立一个 DataSourceController,一个 MySQLController,一个 RedisController,我们可以先在 DataSourceController 里注入 MySQLController 和 RedisController,再在入口控制器里注入 DataSourceController 类