什么是Spring框架:

  Spring是一个基于IOC和AOP的结构J2EE系统的框架:

  IOC 反转控制 是Spring的基础,Inversion Of Control,简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象;

  DI 依赖注入 Dependency Inject, 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。

原理分析:

  以获取对象的方式来进行比较

    传统的方式:
      通过new 关键字主动创建一个对象。
    IOC方式:
      对象的生命周期由Spring来管理,直接从Spring那里去获取一个对象。 IOC是反转控制

      (Inversion Of Control)的缩写,就像控制权从本来在自己手里,交给了Spring。

  打个比喻:
    传统方式:相当于你自己去菜市场new 了一只鸡,不过是生鸡,要自己拔毛,去内脏,再上

         花椒,酱油,烤制,经过各种工序之后,才可以食用。
    用 IOC:相当于去馆子(Spring)点了一只鸡,交到你手上的时候,已经五味俱全,你就只管

        吃就行了。

接下来通过运行TestSpring演示如何用Spring获取一个对象,并打印其name以及使用IOC的方式,对Product对象,注入一个Category对象

(创建项目以及导包过程已省略,关于spring项目中需要的jar包介绍,请点击此处

准备pojo Category 、Product,用来演示IOC和DI:

package com.spring.pojo;

public class Category {

    public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private int id;
private String name;
}
package com.spring.pojo;

public class Product {

    private int id;
private String name;
private Category category;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}

创建applicationContext.xml:

    在src目录下新建applicationContext.xml文件;
    applicationContext.xml是Spring的核心配置文件,通过关键字p即可获取Product对象

    (IOC过程),该对象获取的时候,即被注入了字符串"product 1“到name属性中(DI过程)。

    在创建Product的时候注入一个Category对象,注意,这里要使用ref来注入另一个对象(DI过程)

<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean name="c" class="com.spring.pojo.Category">
<property name="name" value="category 1" />
</bean>
   <bean name="p" class="com.how2java.pojo.Product">
       <property name="name" value="product1" />
            <!--使用ref注入category对象-->
       <property name="category" ref="c" />
    </bean>
</beans>
TestSpring:
    测试代码,演示通过spring获取product对象,以及该对象被注入的name和category属性。如图所示,可以打印
    出通过Spring拿到的Product对象的name属性和Category对象的name属性。
          

package com.spring.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.spring.pojo.Product; public class TestSpring { public static void main(String[] args) {
//读取配置文件
ApplicationContext context = new ClassPathXmlApplicationContext(
          new String[] { "applicationContext.xml" });
//通过关键字“c”,从spring中获取Category对象
Product p = (Product) context.getBean("p");
     
//p.getName()获取p对象中属性name的值,p.getCategory().getName()获取category的name值
System.out.println(p.getName());
     System.out.println(p.getCategory().getName());
}
}

注:读取配置文件:

//方式一:(只能读取一个配置文件)
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//方式二:(可读取一个或多个配置文件)
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });

原文地址:https://how2j.cn/k/spring/spring-injection/88.html#nowhere

spring框架学习(一)——IOC/DI的更多相关文章

  1. Spring框架学习之IOC(一)

    Spring框架学习之IOC(一) 先前粗浅地学过Spring框架,但当时忙于考试及后期实习未将其记录,于是趁着最近还有几天的空闲时间,将其稍微整理一下,以备后期查看. Spring相关知识 spri ...

  2. Spring框架学习之IOC(二)

    Spring框架学习之IOC(二) 接着上一篇的内容,下面开始IOC基于注解装配相关的内容 在 classpath 中扫描组件 <context:component-scan> 特定组件包 ...

  3. Spring框架学习总结(上)

    目录 1.Spring的概述 2.Spring的入门(IOC) 3.Spring的工厂类 4.Spring的配置 5.Spring的属性注入 6.Spring的分模块开发的配置 @ 1.Spring的 ...

  4. Spring框架学习笔记(1)

    Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...

  5. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  6. Spring框架学习1

    AnonymouL 兴之所至,心之所安;尽其在我,顺其自然 新随笔 管理   Spring框架学习(一)   阅读目录 一. spring概述 核心容器: Spring 上下文: Spring AOP ...

  7. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  8. spring 框架学习网站

    spring 框架学习网站 NO1 http://www.mkyong.com NO2 https://spring.io/docs/reference

  9. Spring框架学习笔记(5)——Spring Boot创建与使用

    Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...

随机推荐

  1. [HZOI 2016] 偏序(CDQ套CDQ)

    传送门 思路: 就是cdq套cdq的模板题 #include <bits/stdc++.h> using namespace std; typedef long long ll; cons ...

  2. 201871010110-李华《面向对象程序设计(java)》第6-7周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  3. centos安装安全狗5步就能完成

    安全狗是为服务器开发的一款服务器管理软件,客户的服务器是centos 64位,我们就来看看如何安装吧.首先必须得有root账号权限,不然下面的步骤可能都无法执行.随ytkah一起来操作吧 1.下载安全 ...

  4. eclipse---之Console窗口命令行输入

    在 Eclipse 中使用 Windows 命令行. 第一步:设置一个新的外部配置工具  在 Eclipse 中,选择 “Run -> External Tools -> External ...

  5. hdu6222——佩尔方程&&大数__int128

    题意 给定一个整数 $N$($1 \leq N \leq 10^{30}$),求最小的整数 $t$,要求 $t \geq N$,使得边长为 $t-1, t, t+1$ 的三角形面积为整数. 分析 根据 ...

  6. 小程序开发第一天josn和wxml

    视频中只有app.josn路径还有wxm文本.js中没有调用page.原视频中是可以出来文本内容的. 但是把js调用page以后是可以呈现的 所以疑问点就是为什么以前可以? 1.微信开发工具改了,强制 ...

  7. 8259A的初始化(多片)

    1.主从式8259A的初始化设置: 初始化设置如下: (1)中断触发方式:边沿触发 (2)中断屏蔽方式:常规屏蔽方式,即使用OCW1向IMR写屏码 (3)中断优先级排队方式:固定优先级的完全嵌套方式 ...

  8. Stuts 文件上传

    Stuts 文件上传 三种上传方案         1.上传到tomcat服务器 上传图片的存放位置与tomcat服务器的耦合度太高         2.上传到指定文件目录,添加服务器与真实目录的映射 ...

  9. 1-7docke的网络模式

    1.Bridge模式 bridge 模式是 docker 的默认⽹络模式,不写 –net 参数,就是 bridge 模式.比如使⽤ docker run - p 时 工作模式从网上找了一个,如下 例子 ...

  10. 微慕WordPress小程序增强版

    2017年1月9日,张小龙在2017微信公开课Pro上发布的微信小程序正式上线.在过去的2年多的时间里,微信小程序领头,各大互联网平台也不甘落后,陆续推出自己的小程序.2018年7月4日,百度智能小程 ...