spring boot--注解 案例

0.@Configuration

1.@Bean

  描述:在spring容器中定义一个bean供@Autowired使用

  注解对象:方法

  参数:

    value -- bean别名和name是相互依赖关联的,value,name如果都使用的话值必须要一致。整个程序之中不能存在相同name||value的Bean
    name -- bean名称,如果不写会默认为注解的方法名称
    autowire -- 自定装配默认是不开启的,建议尽量不要开启,因为自动装配不能装配基本数据类型、字符串、数组等,这是自动装配设计的局限性,以及自动装配不如显示依赖注入精确,ps:此方法已经过期了,不推荐使用
    initMethod -- bean的初始化之前的执行方法,该参数一般不怎么用,因为可以完全可以在代码中实现
    destroyMethod -- bean销毁执行的方法

@Configuration
public class Test {
    @Bean(value = "bean")//如果此处没有定义value||name,那么默认为被注解方法的首字母小写的方法名。即@Bean(value = "bean1")
    public String bean1(){
        return "Bean test val";
    }
}

 

1.@Autowired

  描述:将Bean的值装配给注解的字段

  注解对象:字段

  参数:

    required -- 是否必须存在对应的Bean,否则将会报错。默认值:true

   @Autowired
    String bean1;

    @RequestMapping("/index")
    public void index() throws Exception{
        System.out.println(bean1);
    }

2.@Quqlifier

  描述:装载指定名称的Bean,如果不指定,则默认装载与注解字段字段同名的,首字母小写的的Bean

  注解对象:被@Autowired注解的字段

  参数:

    value:指定的Bean的name或value

    @Qualifier(value = "bean")
    @Autowired
    String bean1;

    @RequestMapping("/index")
    public void index() throws Exception{
        System.out.println(bean1);
    }

3.@Value

  描述:将application.properties指定属性的值,赋值给被注解的字段

  注解对象:字段

  参数:

    value -- 如果使用的是模板语法,被注解字段绑定的值将是application.properties中对应前缀的值。否则则为value的值

//application.properties

testobj.prop1=testobj.prop1.value
@RestController
public class index {

    @Value(value = "prop1 value")
    String prop1;

    @Value(value = "${testobj.prop1}")
    String prop2;

    @RequestMapping("/index")
    public void index() throws Exception {
        System.out.println(prop1);//prop1 value
        System.out.println(prop2);//testobj.prop1.value
    }
}

 

3.@ConfigurationProperties

  描述:读取application.properties中的属性,并将其属性值赋值给被注解的类,与@Value不同的是,@Value只能指定一个字段,而@ConfigurationProperties可以批量指定字段

  注解对象:class

  参数:

    prefix -- 指定的application.properties中属性的前缀

//application.properties

testobj.name=obj name
testobj.index=obj index
//@ConfigurationProperties 定义

@Component @ConfigurationProperties(prefix
= "testobj") public class Test2 { //对应的字段可以没有get方法,但是必须要拥有set方法,否则无法将application.properties值写入对应的字段 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getIndex() { return index; } public void setIndex(String index) { this.index = index; } public String name; public String index; }
//使用

@RestController public class index {
//使用@Autowired 获取到生成的Bean,如果使用 new Test2();的话得到的是一个新的实例对象,而非被ConfigurationProperties注解生成的Bean对象,实例对象是没有值的 @Autowired Test2 test2; @RequestMapping("/index") public void index() throws Exception{ Test2 t=test2; System.out.println(t.name); } }

4.@ComponentScan

 

表明容器

  @Component

  @

 

posted @ 2021-08-23 13:29  眼里有激光  阅读(95)  评论(0编辑  收藏  举报