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 + '\'' +
'}';
}
}