为什么能通过user这个名字,拿到注册的bean呢,因为
context.registerBean(User.class);相当于注册了一个名为User类首字母小写的bean
Supplier的使用:
package com.luban;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
/* ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");*/
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
/* AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(kwqFactoryBean.class);*/
//生成两个bean &user :kwqFactoryBean类型的对象,user: getObject里返回的对象
/* context.registerBeanDefinition("user",beanDefinition);*/
//去实例化bean
/*
kwqFactoryBean user1 = context.getBean("&user", kwqFactoryBean.class);*/
context.registerBean(User.class, new Supplier<User>() {
@Override
public User get() {
User user = new User();
user.setName("kwq");
return user;
}
});
context.refresh();
User user1 = context.getBean("user",User.class);
System.out.println(user1);
}
}
这样返回的就是Supplier中的重写方法中的user