目录
四、@Configuration(proxyBeanMethods = true)
一、@Configuration 与@Bean注解
@Data
public class User {
private String name;
private Integer age;
}
@Configuration //配置类,替代配置文件
public class AppConfig {
@Bean //替代配置文件里的bean标签
public User user(){
User user = new User();
user.setName("张三");
user.setAge(35);
return user;
}
}
可以通过注解修改组件名
@Bean("myUser") //替代配置文件里的bean标签,通过组件值修改组件名
public User user(){
User user = new User();
user.setName("张三");
user.setAge(35);
return user;
}
二、加载的组件相当于单实例
public static void main(String[] args) {
//Java10 局部变量类型的自动推断
var run = SpringApplication.run(Boot301Application.class, args);
String[] type = run.getBeanNamesForType(User.class);
for (String s : type) {
System.out.println("s="+ s);
}
Object myUser1 = run.getBean("myUser");
Object myUser2 = run.getBean("myUser");
System.out.println("----");
System.out.println( myUser1 == myUser2);
变为多实例通过注解实现
三、配置类本身是组件
@SpringBootApplication
public class MyApplicataion {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MyApplicataion.class, args);
String[] names = run.getBeanDefinitionNames();
for (String name: names) {
System.out.println(name);
}
MyConfig bean = run.getBean(MyConfig.class);
System.out.println(bean);
}
四、@Configuration(proxyBeanMethods = true)
@Configuration(proxyBeanMethods = true) //这个类就是配置类相当于配置文件
public class MyConfig {
@Bean
public User user(){
return new User("老王",25);
}
@Bean("pet") //相当于组件
public Pet pet(){
return new Pet("小白",1);
}
}
proxyBeanMethods:代理bean的方法
如果@Configuration(proxyBeanMethods = true)代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有。
五、导入第三方的组件
使用@Import注解即可实现
步骤:
1、@Configuration 编写一个配置类
2、在配置类中,自定义方法给容器中注册组件。配合@Bean
3、或使用@Import 导入第三方的组件