@Data
@ToString
public class User {
private String username;}
1.
2.
3.
4.
5.
6.
7.
测试:
public class XmlBeanInjectionDemo {
public static void main(String[] args){
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:XmlBeanInjectionDemo.xml");
applicationContext.refresh();
User user = applicationContext.getBean(User.class);
System.out.println(user);}}
public class PropertiesBeanInjectionDemo {
public static void main(String[] args){
GenericApplicationContext applicationContext = new GenericApplicationContext();//创建一个PropertiesBeanDefinitionReader,可以从properties读取Bean的信息,将读到的Bean信息放到applicationContext中
PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(applicationContext);//创建一个properties文件对应的Resource对象
Resource classPathResource = new ClassPathResource("PropertiesBeanInjectionDemo.properties");//加载配置文件
propReader.loadBeanDefinitions(classPathResource);
applicationContext.refresh();
User user = applicationContext.getBean(User.class);
System.out.println(user);}}
public class UserImportSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata){
System.out.println("调用 UserImportSelector 的 selectImports 方法获取一批类限定名");
return new String[]{"com.sanyou.spring.bean.injection.User"};}}
@Import(UserImportSelector.class)
public class ImportSelectorDemo {
public static void main(String[] args){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();//将 ImportSelectorDemo 注册到容器中
applicationContext.register(ImportSelectorDemo.class);
applicationContext.refresh();
User user = applicationContext.getBean(User.class);
System.out.println(user);}}
public class UserImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
@Override
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator){//构建一个 BeanDefinition , Bean的类型为 User
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class)//设置User这个Bean的属性username的值为三友的java日记
.addPropertyValue("username","三友的java日记").getBeanDefinition();//把User的BeanDefinition注入到BeanDefinitionRegistry中
registry.registerBeanDefinition("user", beanDefinition);}}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
测试类
@Import(UserImportBeanDefinitionRegistrar.class)
public class UserImportBeanDefinitionRegistrarDemo {
public static void main(String[] args){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.register(UserImportBeanDefinitionRegistrarDemo.class);
applicationContext.refresh();
User user = applicationContext.getBean(User.class);
System.out.println(user);
}
}
public class RegisterUserBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {//创建一个User对象
User user = new User();
user.setUsername("三友的java日记");//将这个User对象注入到Spring容器中
beanFactory.registerSingleton("user", user);}}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
测试
public class RegisterUserDemo {
public static void main(String[] args){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
applicationContext.register(RegisterUserBeanFactoryPostProcessor.class);
applicationContext.refresh();
User user = applicationContext.getBean(User.class);
System.out.println(user);}}
public class UserFactoryBean implements FactoryBean<User>{
@Override
public User getObject() throws Exception {
User user = new User();
user.setUsername("三友的java日记");
return user;}
@Override
public Class<?> getObjectType(){
return User.class;}}
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
测试
public class UserFactoryBeanDemo {
public static void main(String[] args){
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();//将UserFactoryBean注入到Spring容器中
applicationContext.register(UserFactoryBean.class);
applicationContext.refresh();
User user = applicationContext.getBean(User.class);
System.out.println(user);}}