1、@Configuration
在以前我们给容器里面加组件的时候,通常都在配置文件里面写出这样的效果
<bean id="person" class="com.lili.entity.Person"> <property name="name" value="张三"/> </bean>
而现在有了这个注解,我们就可以在java代码上实现注册bean的功能了,
具体写法如下:
@Configuration// 表名此类是一个配置类 public class MyConfig { @Bean // 给容器里添加组件,方法名为组件的id,返回类型就是组件类型 public Person getPerson(){ return new Person("张三"); } }
补充:获取的组件默认是单实例的,配置类本身也是一个组件
2、@Import
@Import({Person.class}) @Configuration public class MyConfig { @Bean public Person getPerson(){ return new Person("张三"); } }
说明:@Import注解,里面参数是一个Class类型的数组,比如@Import({Person.class})
会给容器中自动创建出这个类型的组件
测试:
ConfigurableApplicationContext run = SpringApplication.run(Springboot01Application.class, args); String[] beanNamesForType = run.getBeanNamesForType(Person.class); // 打印所有Person类型的bean System.out.println(Arrays.toString(beanNamesForType));
输出:
[com.lili.entity.Person, getPerson]
3、@Conditional
解释:条件装配,满足Conditional指定的条件,则进行组件注入
这里我就拿@ConditionalOnBean举例,
@Import({Person.class}) @Configuration public class MyConfig { @Bean @ConditionalOnBean(name = "getDog") public Person getPerson(){ return new Person("张三"); } }
如果容器里没有id为getDog的bean,也就不会创建id为getPerson的bean,反之会装配成功,我们测试一下
@SpringBootApplication public class Springboot01Application { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(Springboot01Application.class, args); System.out.println("getPerson " + run.containsBean("getPerson")); System.out.println("getDog " + run.containsBean("getDog")); } }
运行:
getPerson false getDog false
显然和我们预想结果一样,条件不满足,装配未成功,接下来我们修改一下把getDog注入容器中
@Import({Person.class}) @Configuration public class MyConfig { @Bean public Dog getDog(){ return new Dog(); } @Bean @ConditionalOnBean(name = "getDog") public Person getPerson(){ return new Person("张三"); } }
结果:
getPerson true getDog true
4、@ImportResource
解释:用于导入xml里面的bean
xml文件:
<bean id="person" class="com.lili.entity.Person"> <property name="name" value="张三"/> </bean>
导入使用:
@ImportResource("classpath:beans.xml") @Configuration public class MyConfig { @Bean public Dog getDog(){ return new Dog(); } }
5 、@ConfigurationProperties
解释:配置绑定,读取properties文件中的内容,绑定到javabean里面,以便随时使用
使用:prefix表示前缀
@ConfigurationProperties(prefix = "person.lili") public class Person { private String name; public String getName() { return name; } public Person(String name) { this.name = name; } public Person() { } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }
在properties文件中进行赋值:
person.lili.name=丽丽
编写controller:
@RestController public class HelloController { @Autowired private Person person; @RequestMapping("/getPerson") public Person getPerson(){ return person; } }
结果:
{ "name": "丽丽" }