配置类
public class Test {
public static void main(String[] args) {
//1.定义配置类
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
//2.把Config定义为配置类
annotationConfigApplicationContext.register(Config.class);
annotationConfigApplicationContext.refresh();
User user = annotationConfigApplicationContext.getBean("user", User.class);
System.out.println(user);
}
}
class User {
}
class Config{
//3.有Bean注解,可以从这个方法上获取Bean
@Bean
public User user(){
return new User();
}
}
xml不写了
注解
public class Test {
public static void main(String[] args) {
//1.定义配置类
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
annotationConfigApplicationContext.register(Config.class);
annotationConfigApplicationContext.refresh();
User user = annotationConfigApplicationContext.getBean("user", User.class);
System.out.println(user);
}
}
//3.发现User被注册为Bean
@Component
class User {
}
//2.找到配置类,扫描配置类这个注解下的所有类,查看有没有Bean
@ComponentScan("com.test")
class Config {
}
BeanDefinition
public class Test {
public static void main(String[] args) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(User.class);
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
annotationConfigApplicationContext.refresh();
annotationConfigApplicationContext.registerBeanDefinition("user", beanDefinition);
Object user = annotationConfigApplicationContext.getBean("user");
System.out.println(user);
}
}
实现FactoryBean
public class Test {
public static void main(String[] args) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(Config.class);
AnnotationConfigApplicationContext an = new AnnotationConfigApplicationContext();
//下一步生成了两个对象,一个是&user,Config; 一个是 user,User
an.registerBeanDefinition("user",beanDefinition);
an.refresh();
System.out.println(an.getBean("&user"));
System.out.println(an.getBean("user"));
}
}
class User {
}
@Component
class Config implements FactoryBean{
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
}
还有
public class Test {
public static void main(String[] args) {
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
beanDefinition.setBeanClass(Config.class);
AnnotationConfigApplicationContext an = new AnnotationConfigApplicationContext();
an.registerBean(User.class);
an.refresh();
System.out.println(an.getBean("user"));
}
}
class User {
}
}
supplier
{
AnnotationConfigApplicationContext an = new AnnotationConfigApplicationContext();
an.registerBean(User.class,new Supplier<User>(){
@Override
public User get() {
return new User();
}
});
an.refresh();
System.out.println(an.getBean("user"));
}
工厂,
//DefaultListableBeanFactory实现了BeanFactory接口
DefaultListableBeanFactory dlabf = new DefaultListableBeanFactory();
//AbstractBeanDefinition实现了BeanDefinition接口
AbstractBeanDefinition abstractBeanDefinition = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
//BeanDefinition是一个描述Bean特征的对象,它里面的属性都是对Bean对象的描述
// 设置BeanDefinition的BeanClass属性,这是对Bean的类型的描述
abstractBeanDefinition.setBeanClass(User.class);
//把这个Definition注册进工厂(添加到map中)
dlabf.registerBeanDefinition("user", abstractBeanDefinition);
System.out.println(dlabf.getBean("user"));
map就是单例池