Spring:01 IoC-Spring创建Bean对象的3种方式

Spring容器创建Bean对象的3种方式

Spring容器创建Bean对象的3种方式

方式1:无参构造器 这是最常用的一种方式

方式2:静态工厂 对象由工厂来生产。

​ 1)要有一个静态工厂类:里面的方法都是静态方法,如StaticFactory

​ 2)要有生产对象的方法。如public static DataSource createDataSource(){}

方式3:动态工厂

​ 思想同上。

以前创建一个对象,都是new出来的!

那Spring容器创建Bean对象,怎么创建?

​ 即在Spring的xml配置文件配置标签,告诉Spring容器(又常被称为IoC容器)去创建Bean对象。

Spring核心配置文件,一般命名为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">
</beans>

它的根标签就是。

方式1:无参构造

(1)定义一个类

自定义的类,如果是JDK自有或其他支持jar包中的java类,就不需要这一步了。

public class UserDaoImpl implements UserDao {
    public void save(){
        System.out.println("UserDaoImpl: save() running...");
    }
}

(2)配置文件中声明Bean对象

<bean class="cn.yetis.dao.impl.UserDaoImpl" id="userDao"/>

Spring配置文件中声明Bean对象,就是告诉Spring框架,在Spring容器中去创建这个Bean对象。

(3)写测试代码

maven项目,测试包下,写个测试类

public class SpringTest {
    /**
     * Spring容器创建Bean对象:无参构造器方式
     */
    @Test
    public void test01() {
        // 1. 创建Spring容器
        String config = "applicationContext.xml";
        ApplicationContext context = new ClassPathXmlApplicationContext(config);

        // 2. 从容器获取Bean对象
        UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao");

        // 3. 操作
        userDao.save();//UserDaoImpl: save() running...
    }
}

方式2:静态工厂

(1)写一个静态工厂类

类中有产生对象的方法

public class StaticFactory {
    public static ComboPooledDataSource createDataSource(){
        return new ComboPooledDataSource();
    }

    public static UserDao createUserDao(){
        return  new UserDaoImpl();
    }
}

(2)xml配置

<!--context命名空间-->
<context:property-placeholder location="classpath:jdbc.properties"/>

<!--==========静态工厂创建Bean对象===========-->
    <!--非自定义类-->
    <bean class="cn.yetis.factory.StaticFactory" factory-method="createDataSource" id="dataSource2">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--自定义类-->
    <bean class="cn.yetis.factory.StaticFactory" factory-method="createUserDao" id="userDao2"/>

(3)写测试代码

	/**
     * Spring创建Bean对象:静态工厂方式
     */
    @Test
    public void test02() throws SQLException {
        // 1. 创建Spring容器
        String config = "applicationContext.xml";
        ApplicationContext context = new ClassPathXmlApplicationContext(config);

        // 2. 获取Bean对象
        UserDaoImpl userDao = (UserDaoImpl) context.getBean("userDao2");
        DataSource dataSource2 = (DataSource) context.getBean("dataSource2");

        // 3. 应用
        userDao.save();//UserDaoImpl: save() running...
   		System.out.println(dataSource2.getConnection());
        //com.mchange.v2.c3p0.impl.NewProxyConnection@5db45159
    }	

方式3:动态工厂

(1)写动态工厂类

public class DynamicFactory {

    //Druid连接池,非定义类
    public DruidDataSource createDruidDataSource(){
        return new DruidDataSource();
    }

    //自定义类
    public UserDaoImpl createUserDao(){
        return new UserDaoImpl();
    }
}

(2)xml配置

<!--context命名空间-->
    <context:property-placeholder location="classpath:jdbc.properties"/>

<!--动态工厂创建Bean对象-->
    <!--非自定义类-->
    <bean class="cn.yetis.factory.DynamicFactory" id="dynamicFactory"/>
    <bean factory-bean="dynamicFactory" factory-method="createDruidDataSource" id="druidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    <!--自定义类-->
    <bean factory-bean="dynamicFactory" factory-method="createUserDao" id="userDao3"/>

(3)写测试代码

	/**
     * Spring创建Bean对象:动态工厂方式
     */
    @Test
    public void test03() throws SQLException {
        // 1. 获取Spring容器
        String config = "applicationContext.xml";
        ApplicationContext context = new ClassPathXmlApplicationContext(config);

        // 2. 获取Bean对象
        DataSource druidDataSource = (DataSource) context.getBean("druidDataSource");
        UserDaoImpl userDao3 = (UserDaoImpl) context.getBean("userDao3");

        // 3. 应用
        userDao3.save();//UserDaoImpl: save() running...
        System.out.println(druidDataSource.getConnection());
        //com.mysql.jdbc.JDBC4Connection@4df50bcc
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值