一、Spring的使用

1.导入jar包

2.编写实体类

Person.java

public class Person{

	private String name;

	public void say(){
System.out.println("Hello," + name);
} public String getName(){
return name;
} public void setName(String name){
this.name = name;
} }

3.编写配置文件

<?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 -->
<bean id="person" class="com.kiwi.domain.Person">
<property name="name" value="Tom"/>
</bean> </beans>

4.编写测试类

Test.java

	@Test
public void testHello(){
//1.创建Spring的IOC容器对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); //2.从IOC容器获取bean实例
Person person = (Person)context.getBean("person"); //3.调用方法
person.say();
}

结果输出:

            Hello,Tom

 

二、IOC容器

1.IOC概述

     控制反转(Inverse of Control): 其思想是反转资源获取的方向。传统的资源查找方式是要求组件向容器发起请求查找资源。作为回应,容器适时的返回资源。而应用了IOC之后,则是容器主动地将资源推送给它所管理的组件,组件所要做的仅仅是选择一种合适的方式来接受资源。

 

2.BeanFactory和ApplicationContext

     Spring通过一个配置文件描述了Bean及Bean之间的依赖关系,利用Java语言的反射功能实例化Bean并建立了Bean之间的依赖关系。Spring的IOC容器在完成这些底层工作的基础上,还提供了Bean实例缓存,生命周期管理、Bean实例代理、事件发布、资源装载等高级服务。

     BeanFactory是Spring框架的基础设施,面向Spring本身。而ApplicationContext面向Spring框架的开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory。

                         

ApplicationContext有两个主要的实现类:

(1)ClassPathXmlApplicationContext: 从类路径下加载配置文件。

(2)FileSystemXmlApplicationContext: 从文件系统加载配置文件。

     ConfigurableApplicationContext实现了ApplicationContext,主要增加列两个方法: refresh()和close(),让ApplicationContext具有启动、刷新和关闭上下文的能力。

      ApplicationContext在初始化上下文的时候就实例化了所有单例的Bean。

     WebApplicationContext是专门为Web而准备的,它允许从相对于Web根目录的路径完成初始化工作。

 

三、依赖注入的3种方式

1.属性注入

     属性注入即通过setXxx()方法注入Bean的属性值或依赖对象,由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际中最常采用的注入方式。

     属性注入要求Bean提供一个默认的构造函数,并为需要注入的属性提供对应的Setter方法。Spring先调用Bean的默认构造函数实例化Bean对象,然后通过反射的方式调用Setter方法注入属性值。

Car.java

public class Car{

	private String brand;
private String color;
private int price;
private int maxSpeed; @Override
public String toString(){
return "Car [brand=" + brand + ", color=" + color + ", price=" + price + ", maxSpeed=" + maxSpeed + "]";
} //省略 get()、set()方法....
}

applicationContext.xml

<?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
class: bean的全类名,通过反射在IOC容器中创建Bean,所以要求Bean中必须有无参的构造器
id:bean的名称,是唯一的
-->
<bean id="car" class="com.kiwi.domain.Car">
<property name="brand" value="BMW"/>
<property name="color" value="Black"/>
<property name="price" value="800000"/>
<property name="maxSpeed" value="200"/>
</bean> </beans>

Test.java

	@Test
public void testCar(){
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Car car = (Car)context.getBean("car");
System.out.println(car);
}

结果:

     Car [brand=BMW, color=Black, price=800000, maxSpeed=200]

 

2.构造函数注入

     构造函数注入是除属性之外的另一种常用的注入方式,它保证一些必要的属性在Bean实例化时就得的设置,并且确保了Bean实例在实例化之后就可以使用。

(1)按照索引匹配入参

<bean id="car" class="com.kiwi.domain.Car">
<constructor-arg index="0" value="BMW"/>
<constructor-arg index="1" value="Red"/>
<constructor-arg index="2" value="800000"/>
</bean>

(2)按照类型匹配入参

<bean id="car" class="com.kiwi.domain.Car">
<constructor-arg type="java.lang.String" value="BMW"/>
<constructor-arg type="java.lang.String" value="Red"/>
<constructor-arg type="int" value="200"/>
</bean>

3.工厂方法注入

     工厂方法需要额外的类和代码,这些功能和业务是没有关系的,所以不推荐使用工厂方法的注入方式。

Spring基础学习(一)—初识Spring的更多相关文章

  1. Spring Boot 学习1-创建Spring Boot应用

    如果使用Maven, 确保先安装好Maven再继续. 创建POM文件 在这里有两种方式: 继承Spring Boot parent的pom. 不继承. 继承Spring Boot pom 1 2 3 ...

  2. spring基础学习01

    spring基础 Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用 IOC控制反转 把创建对象和维护对象之间的关系权利 ...

  3. Spring基础学习笔记

    1. Spring入门 1. 1 Spring的体系结构 1.2 HelloWorld 1.2.1 Maven的使用 1)maven 的javase工程目录结构: 2)maven的settings.x ...

  4. Java开发学习(一)----初识Spring及其核心概念

    一. Spring系统架构 1.1 系统架构图 Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基. Spring Framework的发展也经历了很多版本的变更,每 ...

  5. Spring学习,初识Spring

    Spring概述 将Spring理解为管理对象间依赖关系的容器 “解耦” 根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类 ```Spring 是为了解决企业级开发的复 ...

  6. spring揭密学习笔记(1) --spring的由来

    1.spring起源于在EJB暴露出各种严重问题的情况应运而生. Spring是于2003年兴起的一个轻量级的Java开发框架, Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解 ...

  7. 【Spring Boot学习之四】Spring Boot事务管理

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.springboot整合事务事务分类:编程事务.声明事务(XML.注解),推荐使用注解方式,springboot默 ...

  8. 【Spring Boot学习之三】Spring Boot整合数据源

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.Spring Boot整合Spring JDBC 1.pom.xml <project xmlns=&quo ...

  9. spring基础学习

    ClassXmlAplicationContext和FileSystemXmlApplicationContext的区别      https://www.cnblogs.com/sxdcgaq808 ...

随机推荐

  1. [原创.数据可视化系列之十三]idw反距离权重插值算法的javascript代码实现

    图形渲染中,idw反距离权重插值算法是一个应用非常广泛的方法,但是js实现的比较少,目前实现一个: //idw算法 //输入[[x:0,y:0,v:0],[x:0,y:0,v:0],[x:0,y:0, ...

  2. 操作符、语句、函数——Javascript高级程序设计

    1.操作符 一元操作符:++.--放在变量前后的区别,+.—表示正负 位操作符:64位存储.32位计算,对NOT.AND.OR.XOR.<<.>>.>>>的掌 ...

  3. 用react分页显示数据

    去年年底,尝试着用react写个组件化的页面! demo地址 里面有一个list页面弄了一下数据的分页展示 展示一下主要三个组件:父组件listBox.列表组件List.按钮组件PageButton ...

  4. [bzoj3196]Tyvj 1730 二逼平衡树——线段树套平衡树

    题目 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的数值 4.查 ...

  5. Spring AOP的解读

    一.为什么会有AOP 在日常的开发中经常会有这样一种场景,支付相关的业务中经常需要记录日志,而记录的日志大体相同:这样就会造成支付组件和日志组件强关联,耦合在一起了.而AOP的出现就是为了解决这种问题 ...

  6. 2017-3-2 C#基础 集合

    要使用集合必须先引用命名空间,using System.Collections; 集合与数组的不同: 数组:同一类型,固定长度集合:不同类型,不固定长度 集合主要分为六大类:普通集合,泛型集合,哈希表 ...

  7. x01.Weiqi.13: 鼎力推荐

    鼎力推荐 : 点击后即可观看,小伙子讲的很有深度. 说到深度,自然离不了深度学习.AlphaGo 的横空出世,似乎很有学习的必要. MuGo: 点击下载后,发现是 python,自然免不了一番学习,好 ...

  8. String to Integer (atoi) leetcode

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  9. 关于wxpython多线程研究包括(import Publisher错误研究)

    作为一个自动化测试人员,开发基本的应用桌面程序是必须的!最近在研究wxpython相关知识,目前看到多线程一块,发现官方文档介绍说:"在线程中不能修改修改窗口属性!",但是实际情况 ...

  10. 解决WebStorm无法连接到Chrome

    问题: 点击 中的chrome时,出现了错误,如下: 解决办法: 找到 File>setting>Web Browser 修改为 C:\Program Files (x86)\Google ...