Spring配置实现创建对象

Spring的核心是IOC和AOP,通常我们想要调用对象中的方法是先创建对象,由对象调用方法。

而IOC省略了创建对象的这一步骤,直接调用方法。下面来介绍下IOC的实现方式:

第一种:

通过构造方法创建对象(常用的方式)

appicationContext.xml配置文件

<!--配置我们的Dog类  spring 框架在底层 
通过反射的机制 执行了我们的构造方法-->
<bean id="dog" class="cn.pb.dao.impl.Dog"></bean>
测试代码:

@Test
    public void test05(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

        System.out.println("********");

        /**
         * 因为我们在容器中定义了id  根据id找到对应的类
         * 这里的dog是通过构造方法创建的
         */
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();

    }


第二种:

通过静态工厂方法创建对象

<!--02.通过静态工厂 来创建我们对象的实例
     工厂的本身构造不会执行 因为我们的方法是静态的 !类只会被加载,不会被实例化!
     getDog必须是静态的-->


<bean id="dog" class="cn.pb.util.AnimalFactory" factory-method="getDog"></bean>
 
 

测试代码:

//使用静态工厂来创建对象
    @Test
    public  void  test06(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("*************************");
        /**
         * 因为我们在容器中定义了id 根据id找到对应的类
         * 是通过静态工厂来创建的 不走静态工厂的构造方法
         * 工厂的本身构造不会执行 因为我们的方法是静态的 !类只会被加载,不会被实例化!
         */
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

第三种:

通过动态工厂方法创建对象

扫描二维码关注公众号,回复: 59279 查看本文章
 <!--03.动态工厂创建 对象的实例-->
    <bean id="factory" class="cn.pb.util.AnimalFactory"></bean><!-- 调用哪个工厂里的哪个方法  来创建对象  对象的id是dog-->
    <bean id="dog" factory-bean="factory" factory-method="getDog"/>
代码测试:

 //使用动态工厂来创建对象
    @Test
    public  void  test06(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("*************************");
        /**
         * 因为我们在容器中定义了id 根据id找到对应的类
         * 是通过动态工厂来创建的 首先要获得动态工厂的bean
         * 然后再dog的bean
         */
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

验证bean的生命周期

//初始化之后的方法
    public void  init(){
        System.out.println("初始化之后的方法");
    }

    //销毁之前的方法
    public void  destroy(){
        System.out.println("销毁之前的方法");
    }

 
 
    <!--
      设置bean的生命始末
    -->
<bean id="dog" class="cn.pb.dao.impl.Dog" init-method="init" destroy-method="destroy"></bean>
测试代码:

  /**
* 设置bean的生命周期始末
* 01.在Dog类中新增两个方法 init() destroy()
* 02.在容器中 配置
* init-method="init" destroy-method="destroy"
*/
@Test
public void test08(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("*************************");
Animal dog=(Animal) context.getBean("dog");
System.out.println(dog);
/*
* 想看到destroy-method="destroy" 的效果 有两个前提
* 01.bean必须是单例的
* 02.容器需要手动的关闭
*/
((ClassPathXmlApplicationContext)context).close();
}



猜你喜欢

转载自blog.csdn.net/qq_40907295/article/details/80050019
今日推荐