spring01

时间:2022-09-16 17:45:15

spring01

                                                                   spring的体系结构图

spring01

第一个spring入门例子

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

spring01

02.创建对应的包和类

spring01

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的根目录下

spring01

<?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来创建容器对象,由源码得知:

spring01

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"时:效果图如下

spring01

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

spring01

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();
}
spring01

spring01的更多相关文章

  1. running programmer——spring-01(初谈spring)

    今天主要是通过一个简单的登录程序学习一些spring做基础的配置和功能. I.spring的核心配置applicationContext.xml 关于bean的配置官方给出的最基础的配置文件如下: & ...

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

    一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还 ...

  3. spring-01

    Spring概述 概述 Spring是一个开源框架 为企业级开发而生 是一个IOC[DI]和AOP容器框架 有许多优良特性 非侵入式:基于Spring开发的应用中的对象可以不依赖Spring的API. ...

  4. Spring----01&period; 入门知识,IoC&sol;DI

    1.spring两个最基本概念:依赖注入DI.面向切面AOP 2.spring通过上下文Application Context装配bean,实现方式的区别是如何加载它们的配置信息, ClassPath ...

  5. Spring-01 注解实现IOC

    Spring框架四大原则 使用pojo进行轻量级和最小侵入式开发. 通过依赖注入和基于接口编程实现松耦合. 使用AOP和默认习惯进行声明式编程. 使用AOP和模板(template)减少模式化代码. ...

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

    从本文开始,将开始介绍关于 Spring 的一些常见知识点.关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识点. 在如今的 Java Web 开发中,Spring ...

  7. 玩转spring boot——快速开始

    开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv web应用程序 打开Eclipse,新建Maven项目 选择quic ...

  8. spring boot1

    spring boot 玩转spring boot--快速开始   开发环境: IED环境:Eclipse JDK版本:1.8 maven版本:3.3.9 一.创建一个spring boot的mcv ...

  9. Spring特性--DI

    DI:Dependency Injection(依赖注入),通俗的讲就是一种通过xml配置文件,为交给sping容器的对象初始化参数.又称做控制反转:Inversion of Control(IoC) ...

随机推荐

  1. 树莓派3 安装ubuntu-mate

    1.系统安装 1.1.下载ubuntu-mate镜像:https://ubuntu-mate.org/raspberry-pi/ 下载SDFormatterv4:https://www.sdcard. ...

  2. CSS3 Media Queries在iPhone4和iPad上的运用

    CSS3 Media Queries的介绍在W3CPlus上的介绍已有好几篇文章了,但自己碰到的问题与解决的文章还是相对的较少.前几天在<修复iPhone上submit按钮bug>上介绍了 ...

  3. angularJS之&dollar;apply&lpar;&rpar;方法

    这几天,根据buddy指定的任务,要分享一点angular JS的东西.对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的阻力还真是不少.不 ...

  4. ajax正确返回数据,却进入了error分支

    .net 开发: $.ajax({ type: "POST", //post没有数据量限制 url: "ashx/PostHandle.ashx", data: ...

  5. LeetCode112&period;路径总和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22 ...

  6. ReactiveX 学习笔记(13)基础类型

    Key Types and Life Management 本文主题是 Rx 中的基础类型 Subject 类及其生命周期的管理. 公共代码 RxNET private static void Wri ...

  7. jqgrid 让隐藏的列在编辑状态时出现且可编辑

    有时,我们需要隐藏一个列数据,但在启动编辑时又能够被编辑. 1.设置列为编辑:editable: true 2.设置 editrules属性值为: edithidden: true colModel: ...

  8. 嵌入式开发之hi3519---spi nor flash启动

    author:pkf qq:1327706646 1.官方hi3519默认是硬件3byte 地址模式,配置完ddr始终后,sdkv100.020是可以支持正常启动,用到低位16Mflash内存 2.如 ...

  9. zookeeper安装和dubbo-admin使用

    简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提 ...

  10. ios NSURLSession使用说明及后台工作流程分析

    NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意, ...

相关文章