Spring是一个开源框架,为简化企业级应用开发而生,使用Spring可以使简单的JavaBean 实现以前只有EJB才能实现的功能。Spring 是一个IOC和Aop容器框架。

特性:

轻量级Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API

依赖注入(DI --- dependency injection、IOC)

面向切面编程(AOP --- aspect oriented programming)

容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期

框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象

一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)

创建maven工程:

修改pom.xml,引入jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xt</groupId>
<artifactId>spring.ioc</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>spring.ioc Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>spring.ioc</finalName>
</build>
</project>

创建一个Apple类:

package com.xt.spring.ioc;

public class Apple extends Fruit{

    String name="苹果";
public void appleInit(){
System.out.println("Apple还没有生产");
}
public void appleDestroy(){
System.out.println("Apple结束生产");
}
}

配置spring文件,即在src/main/resources下创建Spring文件夹,再文件夹中创建applicationContext.xml文件(也可以只在在src/main/resources下创建,不过这样做回事文件混乱)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd ">
<!--
在IOC容器中,所有的java类统称为 java bean,使用<bean>标签将javabean配置到IOC容器中 bean标签两个重要的属性:1、class 引用javabean的全类名 2、id 为javabean定义一个ID,此ID不能在ioc容器中重复
init-method:表示bean对象创建完毕,调用此初始化方法
destroy-method:当bean回收时,调用此方法
当scope表示Bean的作用域,默认值singleton,表示IOC容器中每个类默认只会产生一个Bean,也就是单例模式。
当scope的值定义为prototype时,表示每次从IOC容器中获取的都是新的对象(在获取时实例化对象)。
下面是不同的bean,可以尝试运行一下,看看不同之处

<bean id="apple" class="com.xt.spring.ioc.Apple" init-method="appleInit" destroy-method="appleDestory"></bean>
<bean id="orange" class="com.xt.spring.ioc.Orange"></bean>
    <bean id="apple" class="com.xt.spring.ioc.Apple" ></bean>
-->
<bean id="apple" class="com.xt.spring.ioc.Apple" init-method="appleInit" destroy-method="appleDestory"></bean> </beans>

最后创建一个测试类,

package com.xt.spring.ioc;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* IOC容器中对象的实例化过程:
* 1、IOC容器实例化
* 2、IOC实例化完成之后,立刻开始实例化IOC容器中配置的javaBean
* 3、使用javaBean
*
* 在spring IOC 容器中每个类默认只会生产一个Bean,也就单例模式。
*
*/
public class test {
private ApplicationContext ioc;
@Before
public void iocInit(){
ioc = new ClassPathXmlApplicationContext("Spring/applicationContext.xml");
}
@Test
public void iocTest(){
Apple a = ioc.getBean("apple",Apple.class);
Apple a1 = ioc.getBean("apple",Apple.class);
System.out.println("======="+(a==a1));
//Orange o = ioc.getBean("orange",Orange.class);
a.eat();
}
}

在Spring中,可以在<bean>元素的scope属性里设置Bean的作用域。

Singleton:SpringIOC 容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=”true”来延迟初始化bean,这时候,只有第一次获取的bean才会初始化bean。

Prototype: 每次从容器中获取bean都是新的对象。

Request: 每次http请求都会创建一个新的bean,该作用域只适用于WebApplicationContext环境。

Session:类似Request,每次有新的绘画都会创建一个新的bean,该作用域只适用于WebApplicationContext环境。

Spring入门-------------1的更多相关文章

  1. Spring入门学习(一)

    SpringMVC基础平台补充(2016.03.03) 如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CL ...

  2. Spring入门(10)-Spring JDBC

    Spring入门(10)-Spring JDBC 0. 目录 JdbcTemplate介绍 JdbcTemplate常见方法 代码示例 参考资料 1. JdbcTemplate介绍 JdbcTempl ...

  3. Spring入门(9)-AOP初探

    Spring入门(9)-AOP初探 0. 目录 什么是面向切面编程 AOP常见术语 AOP实例 参考资料 1. 什么是面向切面编程 Aspect Oriented Programming(AOP),即 ...

  4. Spring入门(8)-基于Java配置而不是XML

    Spring入门(8)-基于Java配置而不是XML 本文介绍如何应用Java配置而不是通过XML配置Spring. 0. 目录 声明一个简单Bean 声明一个复杂Bean 1. 声明一个简单Bean ...

  5. Spring入门(7)-自动检测Bean

    Spring入门(7)-自动检测Bean 本文介绍如何自动检测Bean. 0. 目录 使用component-scan自动扫描 为自动检测标注Bean 1. 使用component-scan自动扫描 ...

  6. Spring入门(6)-使用注解装配

    Spring入门(6)-使用注解装配 本文介绍如何使用注解装配. 0. 目录 使用Autowired 可选的自动装配 使用Qualifier选择 1. 使用Autowired package com. ...

  7. Spring入门(5)-自动装配Bean属性

    Spring入门(5)-自动装配Bean属性 本文介绍如何装配Bean属性. 0. 目录 ByName ByType constructor 默认自动装配 混合使用自动装配和显示装配 1. ByNam ...

  8. Spring入门(4)-注入Bean属性

    Spring入门(4)-注入Bean属性 本文介绍如何注入Bean属性,包括简单属性.引用.内部Bean.注入集合等. 0. 目录 注入简单值 注入引用 注入内部Bean 装配集合 装配空值 使用命名 ...

  9. Spring入门(3)-Spring命名空间与Bean作用域

    Spring入门(3)-Spring命名空间与Bean作用域 这篇文章主要介绍Spring的命名空间和Bean作用域 0. 目录 Spring命名空间 Bean作用域 1. Spring命名空间 在前 ...

  10. Spring入门(2)-通过构造器注入Bean

    Spring入门(2)-通过构造器注入Bean 前一篇文章将了最基本的spring例子,这篇文章中,介绍一下带有参数的构造函数和通过构造器注入对象引用. 0. 目录 带有参数的构造函数 通过构造器注入 ...

随机推荐

  1. 关于sqlmap当中tamper脚本编码绕过原理的一些总结(学习python没多久有些地方肯定理解有些小问题)

    sqlmap中tamper脚本分析编写 置十对一些编码实现的脚本,很多sqlmap里面需要引用的无法实现,所以有一部分例如keywords就只写写了几个引用了一下,其实这里很多脚本运用是可以绕过安全狗 ...

  2. 与Bat脚本的故事

    因为工作时需要将定时处理的业务抽出来,废弃通过监听定时调用的这种方法,改为通过第三方软件定时执行bat脚本来实现,所以学习了一下bat脚本,整理出一些学习中的基础点和重点. 基础点: (1)bat脚本 ...

  3. [VBA原创源代码] excelhome 对花名册进行分类

    最近在学习<菜鸟谈VBA最最基础入门<原创>>,其中第22节有一个VBA编程作业,实现对花名册进行分类. 自己花了点时间,自己丫丫学步,终于实现出来. 在原创聚集地cnblog ...

  4. 「DevOps 转型与实践」沙龙回顾第二讲

    背景介绍 本期分享内容为<平台化 DevOps-云计算与云原生模式下 DevOps 的建设实践>.目前,DevOps 越来越成为大家当前建设的热点,伴随着基础设施的转型和应用框架的转型,更 ...

  5. 【Redis之疑难解析】(error) READONLY You can't write against a read only slave

    一.问题描述 已部署好 Redis 主从服务器,实现了数据的同步. Redis 主服务器(master server)具有读写的权限,而 从服务器(slave master)默认 只具有 读 的权限. ...

  6. golang执行exec命令

    创建对象: cmd, err := exec.Command("echo", "show me")   执行命令: cmd.Run()  //Run 阻塞进程, ...

  7. 多测师_svn_004

    svn 版本控制工具项目管理中的版本控制问题:解决代码冲突困难容易引发bug难于恢复至正确版本无法进行权限控制项目版本发布困难 什么是版本控制是指维护工程蓝图的表座做法,能追踪工程蓝图从诞生到定案的过 ...

  8. 多测师讲解pyhon__hashlib_高级讲师肖sir

    一.加密,加密成16进制的字符串 # import hashlib # 导入hashlib模块# md = hashlib.md5() # 获取一个md5加密算法对象# md.update('需要加密 ...

  9. [源码阅读] 阿里SOFA服务注册中心MetaServer(3)

    [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 0x00 摘要 0x01 概念 1.1 分布式一致性 1.2 ...

  10. Android开发还不会这些?如何面试拿高薪!

    我所接触的Android开发者,百分之九十五以上 都遇到了以下几点致命弱点! 如果这些问题也是阻止你升职加薪,跳槽大厂的阻碍. 那么我确信可以帮你突破瓶颈! 群内有许多来自一线的技术大牛,也有在小厂或 ...