一、Spring配置文件详解

1、详解1

id不允许重复

默认情况下的反射是通过无参构造方法来创建对象的。

Spring默认情况下也是通过无参构造方法来创建对象的,所以上面的bean的内部必须存在无参构造方法,也就是UserDaoImpl这个类中必须存在无参构造方法。

2、详解2

 bean的创建时机 : 打断点,测试bean的创建时机

如果bean的scope是singleton时,它的创建时机就是,当加载配置文件创建Spring容器时,这个bean就创建了。

加载配置文件创建Spring容器就是执行这一行代码:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

如果bean的scope是prototype,它的创建时机是在每次getBean时创建一个对象。

UserDao userDao1 = (UserDao) applicationContext.getBean("userDao");
UserDao userDao2 = (UserDao) applicationContext.getBean("userDao");

3、详解3

Bean的生命周期指:bean什么时候创建,什么时候销毁。

两个属性:初始化方法、销毁方法

com.lyh.dao.impl包下的UserDaoImpl 这个类中有 init()方法和destroy()方法

在bean中配置自己定义的初始化方法 和 销毁方法

<bean id="userDao" class="com.lyh.dao.impl.UserDaoImpl" init-method="init" destroy-method="destroy"/>

@Test //初始化方法 和 销毁方法的 测试
    public void test2(){
        //这个是一个单元测试,没有在一个TomCat服务器内部
        //只要这个单元测试执行完毕,那么该销毁的都给销毁了
        //这里没有出现销毁的方法 是 因为 还没有来得及打印
        //如果想测试出打印 只需要让容器 手动的关闭就是可以了
        //但是这个ApplicationContext接口,没有对应的关闭的方法
        //所以只能用 ClassPathXmlApplicationContext 这个实现类中的关闭的方法
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        //                                               这里就是当前xml配置文件的名称
        UserDao userDao1 = (UserDao) applicationContext.getBean("userDao");
        System.out.println(userDao1);


    }

    @Test //初始化方法 和 销毁方法的 测试
    public void test3(){
        ClassPathXmlApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        //                                               这里就是当前xml配置文件的名称
        UserDao userDao1 = (UserDao) applicationContext.getBean("userDao");
        System.out.println(userDao1);
        applicationContext.close();

    }

 test3的效果:

 4、详解4(bean实例化的三种方式)

1、工厂静态方法实例化: 

UserDaoImpl类:

package com.lyh.dao.impl;
import com.lyh.dao.UserDao;

public class UserDaoImpl implements UserDao{
       public UserDaoImpl(){
           System.out.println("UserDaoImpl创建。。。。")
     }
}
package com.lyh.factory;
import com.lyh.dao.UserDao;
import com.lyh.dao.impl.UserDaoImpl;

public class StaticFactory {
    //对象的工厂创建完毕
    public static UserDao getUserDao(){
        //返回的是创建一个对象
        return new UserDaoImpl();
    }
}

applicationContext.xml配置文件中的内容 

<bean id="userDao" class="com.lyh.factory.StaticFactory" factory-method="getUserDao"/>

测试代码:工厂静态方法实例化

    @Test //工厂静态方法实例化
    public void test4(){
        // 这里就是当前xml配置文件的名称
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao1 = (UserDao) applicationContext.getBean("userDao");
        System.out.println(userDao1);
    }

执行效果:

 2、工厂实例方法实例化

package com.lyh.factory;
import com.lyh.dao.UserDao;
import com.lyh.dao.impl.UserDaoImpl;

public class DynamicFactory {
    //这里就必须得有 工厂对象,再去调用方法
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}
 
<!--先把这个工厂对象让Spring容器产生  再调用 这个工厂内部的 某个方法 -->
<bean id="factory" class="com.lyh.factory.DynamicFactory"/>
<!--要获得userDao这个对象,我要找factory工厂的 getUserDao 方法-->
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"/>

测试方法:

  @Test //工厂实例方法实例化
    public void test4(){
        //这里就是当前xml配置文件的名称
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao1 = (UserDao) applicationContext.getBean("userDao");
        System.out.println(userDao1);
    }

效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值