spring01

                                                                   spring的体系结构图

第一个spring入门例子

01.创建一个java项目 引入所需要的jar包

02.创建对应的包和类

Animal接口对应的代码

public interface Animal {

    String  eat(); //吃饭
    void sleep();  //睡觉
}

Dog类对应的代码

public class Dog implements Animal {

//无参构造 验证什么时候创建对象
public Dog(){
System.out.println("Dog的实例被创建了......");
}

@Override
public String eat() {
System.out.println("吃饭的方法");
return null;
}

@Override
public void sleep() {
System.out.println("睡觉的方法");
}

}

AnimalText对应的代码

public class AnimalTest {

    @Test
    public  void  test01(){
        //之前的一种方式    耦合的!
        Animal animal=new Dog();
        animal.eat();
        animal.sleep();
    }
}

03.使用spring解耦的方式 创建applicationContext.xml文件 放在src的根目录下

<?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 definitions here  我们的bean要定义在这个地方 -->
    <bean id="dog" class="cn.bdqn.dao.impl.Dog"/>
</beans>

04.在AnimalTest测试类中增加代码

@Test
    public  void  test02(){
        /*
         * 使用spring  对象交给容器来创建 解耦
         * 01.引入jar
         * 02.创建容器applicationContext.xml
         * 03.加载spring的配置文件  创建容器   会把容器中所有的bean实例化
         * 04.然后从容器中取Bean
         */
      ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
      System.out.println("*************************");
        //因为我们在容器中定义了ID  根据id找到对应的类
      Animal dog=(Animal) context.getBean("dog");
      dog.eat();
      dog.sleep();
    }

为什么 使用new ClassPathXmlApplicationContext来创建容器对象,由源码得知:

05.在AnimalTest测试类中增加代码   使用其他的方式来创建容器

@Test
    public  void  test03(){
        /*
         * 使用new FileSystemXmlApplicationContext来创建对象
         * 默认applicationContext.xml放在项目的根路径下面
         * 也可以放在电脑指定的盘符下d:/applicationContext.xml
         */
        ApplicationContext context=new FileSystemXmlApplicationContext("applicationContext.xml");
        System.out.println("*************************");
        //因为我们在容器中定义了ID  根据id找到对应的类
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

    @Test
    public  void  test04(){
        /*
         * 使用BeanFactory来创建容器的时候,不会实例化容器中的Bean
         * 在getBean()才创建对应Bean的对象
         */
        BeanFactory context=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        System.out.println("*************************");
        //因为我们在容器中定义了ID  根据id找到对应的类
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

06.使用动态工厂来创建指定的对象

001.创建一个AnimalFactory工厂类

public class AnimalFactory {  //动态工厂

    public  AnimalFactory(){
        System.out.println("工厂的无参构造........");
    }

    //当调用这个方法的时候  返回一个 Dog对象
    public  Animal getDog(){
        System.out.println("工厂中获取Dog实例的方法");
        return new Dog();
    }

}

002.修改applicationContext.xml文件 之前的代码注释掉

<!-- 使用动态工厂创建对象 -->
    <bean id="factory"  class="cn.bdqn.test.AnimalFactory"/>
    <!-- 通过 工厂的指定方法 来得到指定的对象 -->
    <bean id="dog" factory-bean="factory" factory-method="getDog"/>

003.在AnimalTest测试类中创建对应的测试方法

//使用动态工厂来创建对象
    @Test
    public  void  test05(){
      ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
      System.out.println("*************************");
        //因为我们在容器中定义了ID  根据id找到对应的类
      Animal dog=(Animal) context.getBean("dog");
      dog.eat();
      dog.sleep();
    }

07.使用静态的工厂来创建指定的对象

001.修改上面创建的AnimalFactory类  把之前的getDog()注释掉

//静态工厂    不会走无参构造
    public   static  Animal getDog(){
        System.out.println("工厂中静态获取Dog实例的方法");
        return new Dog();
    }

002.修改applicationContext.xml文件  之前的代码注释掉

<!--使用静态工厂创建对象   -->
    <bean id="dog" class="cn.bdqn.test.AnimalFactory" factory-method="getDog"/>

003.在AnimalTest测试类中创建对应的测试方法

//使用静态工厂来创建对象
    @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();
    }

08.bean的单例和原型

001.修改applicationContext.xml文件

 <!--bean的单例和原型
     singleton: 默认的方式创建bean,单例 在容器初始化的时候就创建了 对应的Bean对象
     prototype: 原型! 只有在需要对象(getBean())的时候会创建一个新的对象!
   -->
    <bean id="dog" class="cn.bdqn.dao.impl.Dog"  scope="prototype"/>

002.在AnimalTest测试类中新增测试方法

//bean的单例和原型
    @Test
    public  void  test07(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("*************************");
        //获取两个对象  咱们观察  什么时候 执行  无参构造
        Animal dog=(Animal) context.getBean("dog");
        Animal dog2=(Animal) context.getBean("dog");
    }

003.执行代码 看效果

scope="prototype"时:效果图如下

scope="singleton",或者不写scope属性时:效果图如下

09.设置bean的生命始末

001.在Dog类中新增两个方法

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

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

002.在applicationContext.xml文件中配置

<!--设置bean的生命周期始末  -->
    <bean id="dog" class="cn.bdqn.dao.impl.Dog" init-method="init" destroy-method="destroy"/>

003.在AnimalTest测试类中新增测试方法

/*
     * 设置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();
    }
时间: 2024-10-14 08:14:21

spring01的相关文章

JAVAEE——spring01:介绍、搭建、概念、配置详解、属性注入和应用到项目

一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还能帮其他框架管理对象. aop支持.ioc思想.spring jdbc.aop 事务.junit 测试支持 二.spring搭建 1.导包 日志包:com.springsource.org.apache.commons.logging-1.1.1.jar 可选:com.springsource.or

Spring-01 注解实现IOC

控制反转和依赖注入 Spring通过依赖注入实现控制反转. JavaEE项目通过工厂模式实现控制反转. Spring的依赖注入原理也是基于工厂模式. Spring提供了使用xml.注解.java配置.groovy配置实现依赖注入. 测试环境说明 1.使用myeclipse创建maven项目,jdk基于1.7 2.填写maven项目GAV(三坐标) 3.项目结构 4.pom.xml文件信息 <project xmlns="http://maven.apache.org/POM/4.0.0&q

Spring01——你应该了解的,有关 IOC 容器的一切

从本文开始,将开始介绍关于 Spring 的一些常见知识点.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识点. 在如今的 Java Web 开发中,Spring 生态圈占据着巨大的市场份额.几乎是每个互联网公司都在用 Spring 生态圈的东西.所以掌握Spring 相关知识就成为了我们工作和面试中必不可少的技能.今天将为各位带来 Spring IOC 的相关知识. 概念 IOC -- Inversion of Control,即"控制反转",不

SpringMVC的一个小整理

1.概述 Spring为展示层提供基于MVC设计理念的优秀web框架,是目前主流的MVC框架,而且从Spring3.0后全面超越了Strust2成为了最优秀的MVC框架,其通过一套注解,让POJO成为处理请求的控制器,无需实现任何的接口,还支持REST风格的URL请求,比其他的MVC框架更具有扩展性和灵活性. 2.快速入门 (1)建立动态WEB 项目 (2)导入jar包 –commons-logging-1.1.3.jar            –spring-aop-4.0.0.RELEASE

Spring连载(1)

好久没写博文了,最近玩的太浪,打算把spring再复习一遍,以于温故知新. 先敬上一张spring的图 Spring架构图 Spring是一个非常活跃的开源框架,他是一个基于Core来构架多层javaEE系统的框架,它的主要目的就是为了简化企业的开发. Spring是一种非入侵的方式来管理你的代码,Spring提倡"最少侵入".Spring 的每一个模块都是独立的. Spring-IOC 什么是IOC,IOC全称(Inversion of Control)即控制翻转.IOC的作用就是把

spring IOC 详解

Hello World HelloWorld.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.test.spring01; public class HelloWorld {     private String name;     public HelloWorld() {         System.out.println("调用构造函数...");     }     publi

【第五年-创业路】

[大公司] https://yq.aliyun.com/articles/71294?spm=5176.100239.blogcont73953.65.wn6WlO   微博红包技术最佳实践:架构及运维 https://yc.163yun.com/?id=ycdh&tag=ycdh_hdpt_cnb    云论坛 http://edu.csdn.net/huiyiCourse/detail/419   去哪儿网前端统一构建解决方案 http://geek.csdn.net/news/detail

Spring4

Hello World HelloWorld.java package com.test.spring01; public class HelloWorld { private String name; public HelloWorld() { System.out.println("调用构造函数..."); } public String getName() { return name; } public void setName2(String name) {//对应name=&

Spring视频学习笔记(二)

Spring视频学习笔记(二) XML配置里的Bean自动装配(三个来测试实现) /** * Person类 * */ public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Ad