Spring我爱编程

spring ioc bean实例化的三种方式(xml配置)

2018-05-25  本文已影响15人  DouDouZH

bean实例化有三种方式

1、使用无参数构造创建(重点)

User.java

package work.zhangdoudou.ico;

public class User {
    public void add(){
        System.out.println("add······");
    }
}

applicationContext.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="user" class="work.zhangdoudou.ico.User"></bean>
</beans>

TestUser.java

package work.zhangdoudou.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import work.zhangdoudou.ico.User;

public class TestUser {

    @Test
    public void test() {
        //1加载配置文件,根据创建对象
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        //2得到创建的对象
        User user=(User) context.getBean("user");
        user.add();
        System.out.println(user);
        
    }
}

运行结果


image.png 发生异常
2、使用静态工厂创建
package work.zhangdoudou.ico;

public class User2 {
    private String username;
    
    public User2(){
        
    }
    public User2(String username) {
        this.username = username;
    }

    public void add(){
        System.out.println("user2······");
    }
}

静态工厂类Bean2Factory .java

package work.zhangdoudou.BeanFactory;

import org.springframework.context.annotation.Bean;
import work.zhangdoudou.ico.User2;

public class Bean2Factory {
    //静态方法返回Bean2对象
    public static User2 getBean2(){
        return new User2();
    }

}

applicationContext.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">
    <!-- 使用静态工厂创建bean2 -->
    <bean id="user2" class="work.zhangdoudou.BeanFactory.Bean2Factory" factory-method="getBean2" ></bean>
</beans>

TestUser2.java

package work.zhangdoudou.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import work.zhangdoudou.ico.User;
import work.zhangdoudou.ico.User2;

public class TestUser2 {

    @Test
    public void test() {
        //1加载配置文件,根据创建对象
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        //2得到创建的对象
        User2 user2=(User2) context.getBean("user2");
        user2.add();
        System.out.println(user2);
        
    }
}

运行结果


image.png
3、使用实例工厂创建

User3.java

package work.zhangdoudou.ico;

public class User3 {
    private String username;
    
    public User3(){
        
    }
    public User3(String username) {
        this.username = username;
    }

    public void add(){
        System.out.println("user3······");
    }
}

user3的实例工厂 Bean3Factory.java

package work.zhangdoudou.BeanFactory;

import org.springframework.context.annotation.Bean;
import work.zhangdoudou.ico.User3;

public class Bean3Factory {
    //普通的方法, 返回Bean3对象
    public User3 getBean3(){
        return new User3();
    }
}

applicationContext.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="bean3Factory" class="work.zhangdoudou.BeanFactory.Bean3Factory"></bean>
    <bean id="user3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
</beans>

TestUser3.java

package work.zhangdoudou.test;

import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import work.zhangdoudou.ico.User3;

public class TestUser3 {

    @Test
    public void test() {
        //1加载配置文件,根据创建对象
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        //2得到创建的对象
        User3 user3=(User3) context.getBean("user3");
        user3.add();
        System.out.println(user3);
        
    }
}

运行结果


image.png
上一篇下一篇

猜你喜欢

热点阅读