SpringBoot给容器中注册bean时常用注解

@Configuration和@Bean

  • @Configuration
    标注在类上,告诉SpringBoot这是一个配置类。配置spring容器。在程序启动时加载。
  • @Bean
    标注在方法上(返回一个对象的实例的方法),以方法名作为组件ID,相当于spring的xml配置文件的,作用是注册bean对象

@Configuration和@Bean 注解实践

创建Dog类
package com.minglei.springboot.bean;

public class Dog {
    private Integer Id;
    private String DogName;

    public Dog(Integer id, String dogName) {
        Id = id;
        DogName = dogName;
    }


    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        Id = id;
    }

    public String getDogName() {
        return DogName;
    }

    public void setDogName(String dogName) {
        DogName = dogName;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "Id=" + Id +
                ", DogName='" + DogName + '\'' +
                '}';
    }
}

创建配置类
package com.minglei.springboot.config;

import com.minglei.springboot.bean.Dog;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TestConfiguration {
    public TestConfiguration(){
        System.out.println("TestConfiguration.......已执行");
    }

    @Bean
    public Dog testDog(){
        return  new Dog(1,"tom");
    }

}

应用入口类
package com.minglei.springboot;

import com.minglei.springboot.bean.Dog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot03Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Springboot03Application.class, args);
        Dog dog = run.getBean(Dog.class);
        System.out.println("拿到的bean信息"+dog);
    }

}


执行结果

@Import

给容器中自动创建出引入的组件

@Import实践

TestConfiguration类中引入Person类
package com.minglei.springboot.config;

import com.minglei.springboot.bean.Dog;
import com.minglei.springboot.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Import({Person.class})
@Configuration
public class TestConfiguration {
    public TestConfiguration(){
        System.out.println("TestConfiguration.......已执行");
    }

    @Bean
    public Dog testDog(){
        return  new Dog(1,"tom");
    }

}

项目入口类
package com.minglei.springboot;

import com.minglei.springboot.bean.Dog;
import com.minglei.springboot.bean.Person;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot03Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Springboot03Application.class, args);
        Dog dog = run.getBean(Dog.class);
        System.out.println("拿到的bean信息"+dog);

        Person person = run.getBean(Person.class);
        System.out.println("person信息"+person);
    }

}

执行结果

@Conditional

条件装配,满足conditional指定的条件,则进行组件注入。
他是一个根注解,派生了多个功能注解

@ConditionalOnBean

当容器中存在指定的bean时候注解生效

@ConditionalOnBean实践
package com.minglei.springboot.config;

import com.minglei.springboot.bean.Dog;
import com.minglei.springboot.bean.Person;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Import({Person.class})
@Configuration
public class TestConfiguration {
    public TestConfiguration(){
        System.out.println("TestConfiguration.......已执行");
    }

    @Bean
    public Dog testDog(){
        return  new Dog(1,"tom");
    }

    /**
     * 判断容器中是否包含testDog组件
     * @return
     */
    @ConditionalOnBean(name = "testDog")
    @Bean
    public Person testPerson(){
        return new Person();
    }

}

执行结果

@ConfigurationProperties

获取配置文件值。

实践

application.properties
server.port=8081
#配置的dog信息
mydog.id=100
mydog.dog-name=旺财
实体类

引用配置文件的值(使用@ConfigurationProperties注解时,需要先把类注入到容器中(添加注解@Component))

package com.minglei.springboot.bean;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

//引用配置文件的值(使用@ConfigurationProperties注解时,需要先把类注入到容器中(添加注解@Component))
@Component
@ConfigurationProperties(prefix = "mydog")
public class Dog {
    private Integer Id;
    private String DogName;

    public Integer getId() {
        return Id;
    }

    public void setId(Integer id) {
        Id = id;
    }

    public String getDogName() {
        return DogName;
    }

    public void setDogName(String dogName) {
        DogName = dogName;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "Id=" + Id +
                ", DogName='" + DogName + '\'' +
                '}';
    }
}


执行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用SpringBoot的过程,获取容器bean可以使用@Autowired注解或者通过ApplicationContext获取。其,@Autowired注解可以自动注入容器bean实例,而ApplicationContext则提供了多种方式来获取bean。 使用@Autowired注解获取bean,只需要在需要使用bean的属性或者构造函数上标注该注解,并且确保该bean在程序启动已经注入到容器。例如: ```java @Service public class MyService { //... } @RestController public class MyController { @Autowired private MyService myService; //... } ``` 在上面的例子,MyController类的myService属性使用@Autowired注解进行了注入,SpringBoot会自动从容器查找类型为MyService的bean,并将其注入到属性。 除了@Autowired注解,还可以使用ApplicationContext来获取bean实例。具体来说,可以通过@ComponentScan注解将指定包下的类扫描并注册Spring容器,然后使用ApplicationContext来获取这些bean。例如: ```java @SpringBootApplication @ComponentScan(basePackages = "com.example") public class MyApplication { //... } @Service public class MyService { //... } public class MyUtils { public static MyService getService() { ApplicationContext context = new AnnotationConfigApplicationContext(MyApplication.class); return context.getBean(MyService.class); } } ``` 在上面的例子,MyApplication使用@ComponentScan注解来指定需要注册容器的类所在的包,然后在MyUtils使用ApplicationContext来获取容器的MyService实例。需要注意的是,在每次获取bean实例都会创建一个新的ApplicationContext,因此可能会有性能上的影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值