• spring 创建Bean最全实现方法


    创建bean方式,spring创建bean的方式包含:声明式样注入方式和编程式注入方式。分别为:

      声明式样注入包含:   1)xml 配置化方式  2)@bean注解注入方式3)@Component方式

      编程式注入包含:      4)接口注入方式 5)import 导入方式。

    废话不多说,上代码,

    第一种:xml

     1、xml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    	<bean id="hello" class="org.springframework.northeasttycoon.beans.Hello">
    		<property name="displayName" value="this is display!"/>
    	</bean>
    </beans>
    

     2、hello实体类

    /**
     * @author :java.zhao
     * @date :2018-09-29 10:33
     */
    public class Hello {
    
        public String getDisplayName() {
            return displayName;
        }
    
        public void setDisplayName(String displayName) {
            this.displayName = displayName;
        }
    
        private String displayName;
    
        public void sayHello() {
            System.out.println("dispalyname values is:"+this.displayName);
        }
    
    }

    3、启动类

    /**
     * @author :java.zhao
     * @description:xml 方式
     * @date :2018-09-29 10:10
     */
    public class TestHelloService {
    
        public static void main(String[] args) {
    
            // 加载spring容器
            ApplicationContext ac1 = new ClassPathXmlApplicationContext("classpath:beanfactory.xml");
    
            Hello hello = (Hello)ac1.getBean("hello");
            hello.sayHello();
        }
    }

    第二种:@bean注解注入方式

    1、配置类

    /**
     * @author :java.zhao
     * @date :2018-10-09 11:10
     */
    public class AppConfig02 {
    
        // 第三种 定义bean
        @Bean
        public Fox fox(){
            return new Fox();
        }
    }

    2、fox 实体类

    /**
     * @author :java.zhao
     * @date :2018-10-04 4:43
     */
    public class Fox {
    
        public  Fox() {
           System.out.println("new Fox()");
        }
    }

    3、测试类

    /**
     * @author :java.zhao
     * @date :2018-10-09 11:09
     */
    public class ioc02 {
    
        @Test
        public void test01(){
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig02.class);
            System.out.println("create fox bean:"+ac.getBean("fox"));
        }
    }

    第三种:@Component 注解方式

    1、Fox03类

    /**
     * @author :java.zhao
     * @date :2018-10-04 4:43
     */
    @Component
    public class Fox03 {
    
        public Fox03() {
           System.out.println("new Fox()");
        }
    }

    2、配置类

    /**
     * @author :java.zhao
     * @date :2018-10-09 11:10
     */
    @ComponentScan("org.springframework.beandefinition01.bean")
    public class AppConfig03 {
    
    }

    3、测试类

    /**
     * @author :tycoon
     * @date :2018-10-09 11:15
     */
    public class ioc03 {
    
        @Test
        public void test01(){
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig03.class);
            System.out.println("create fox bean:"+ac.getBean("fox03"));
        }
    }

    第四种:接口注入方式

    1、Fox04 实体类

    /**
     * @author :java.zhao
     * @date :2018-10-04 4:43
     */
    public class Fox04 {
    
        public Fox04() {
           System.out.println("new Fox04()");
        }
    }

    2、测试类

    /**
     * @author :java.zhao
     * @date :2018-10-09 11:15
     */
    public class ioc04 {
    
        @Test
        public void test01(){
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext();
            ac.refresh();
            DefaultListableBeanFactory beanFactory = ac.getDefaultListableBeanFactory();
            AbstractBeanDefinition beanDefinition1 = BeanDefinitionBuilder.genericBeanDefinition().getBeanDefinition();
            beanDefinition1.setBeanClass(Fox04.class);
            beanFactory.registerBeanDefinition("fox04", beanDefinition1);
            System.out.println("create fox04 bean:"+ac.getBean("fox04"));
        }
    }

    第五种: 实现  ImportBeanDefinitionRegistrar 接口

    1、实现  ImportBeanDefinitionRegistrar 接口类。既:Fox05ImportBeanDefinitionRegistrar

    /**
     * @author :java.zhao
     * @date :2018-10-04 6:06
     */
    public class Fox05ImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    
        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
    
            BeanDefinition beanDefinition = new RootBeanDefinition(Fox05.class);
            registry.registerBeanDefinition("fox05",beanDefinition);
        }
    }

    2、fox05实体类

    /**
     * @author :java.zhao
     * @date :2018-10-04 6:07
     */
    public class Fox05 {
        public Fox05() {
            System.out.println("Fox05 create!");
        }
    }

    3、配置类

    /**
     * @author :tycoon
     * @description:TODO
     * @date :2021-10-04 4:30
     */
    @Import(Fox05ImportBeanDefinitionRegistrar.class)
    public class AppConfig05 {
    }

    4、测试类

    /**
     * @author :java.zhao
     * @date :2018-10-09 11:15
     */
    public class ioc05 {
    
        @Test
        public void test01(){
            AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig05.class);
    
            System.out.println("create fox05 bean:"+ac.getBean("fox05"));
        }
    }
  • 相关阅读:
    Java实现文件下载Zip压缩
    @FeignClient注解
    java实现发送邮件功能
    服务熔断Hystrix高级
    java复制文件的4种方式及拷贝文件到另一个目录下的实例代码
    java下载zip文件
    Spring Boot 全局异常处理@ControllerAdvice
    vue入门实践
    读书札记:影响日元的因素
    情感日记:蒙太奇的破碎
  • 原文地址:https://www.cnblogs.com/northeastTycoon/p/spring_create_bean.html
Copyright © 2020-2023  润新知