1. 程式人生 > 其它 >spring 建立Bean最全實現方法

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"));
    }
}