介绍
介绍
使用
注解基础
@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 类