zoukankan      html  css  js  c++  java
  • 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"));
        }
    }
  • 相关阅读:
    c++语言 运算符重载 使用重载运算符实现类的加法运算
    c++语言 类模板的使用 类模板的实现
    C++语言 通过类模板实现加法计算器
    C++语言 对动物的行为实现多态
    c++语言 友元类和友元方法 将普通函数声明为友元函数
    C++语言 通过构造函数初始化学生信息
    c++语言 静态成员数据和静态方法
    欧拉回路心得
    POJ2965 The Pilots Brothers' refrigerator(枚举)
    HDU1269 迷宫城堡(有向图的强连通分量(scc))
  • 原文地址:https://www.cnblogs.com/northeastTycoon/p/spring_create_bean.html
Copyright © 2011-2022 走看看