实现原理

采用XML方式配置Bean的时候,Bean的定义和实现分离的,采用注解的方式可以将两者合为一体,Bean的定义信息直接以注解形式定义在实现类中,从而实现了零配置。

控制反转是一种通过描述(XML/注解),并通过第三方去生产或获取特定对象的方式,Spring中实现控制反转的是IoC容器,其实现方法为依赖注入(Dependency Injection,DI)。



  • 创建一个普通Maven项目
  • 导入Maven依赖(见前章)
  • 编写一个实体类
package cn.iris.pojo;

/**
* @author Iris 2021/8/10
*/
public class HelloSpring { private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String toString() {
return "HelloSpring{" +
"name='" + name + '\'' +
'}';
}
}
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd"> <!--使用Spring创建对象,Spring中将对象描述为Bean-->
<bean id="hello" class="cn.iris.pojo.HelloSpring">
<property name="name" value="Spring"/>
</bean> </beans>
  • 实例化容器&测试
import cn.iris.pojo.HelloSpring;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author Iris 2021/8/10
*/
public class MyTest {
public static void main(String[] args) {
// 获取Spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 对象均在Spring中管理,使用时从中取出
Object hello = (HelloSpring) context.getBean("hello"); System.out.println(hello.toString()); }
}

//输出结果
HelloSpring{name='Spring'}
  • HelloSpring对象由【Spring创建】

  • HelloSpring的属性由【Spring容器设置】

控制反转(IoC)

控制:使用Spring时,对象由Spring创建

反转:程序本身不创建对象,变成被动的接受

IoC即是将主动的创建变为被动的接收ontext

到现在,我们彻底不用去程序中改动,实现不同操作仅需在xml配置文件中进行修改-->IoC:对象由Spring来创建、管理、装配

程序员写好程序,告诉Spring写到‘单子’上,用户照着‘单子’去拿自己想用的

<!--使用Spring创建对象,Spring中将对象描述为Bean
bean = new 类型()
id = 变量名
class = new 的对象
property 给对象属性设值
name 属性名
value 普通类型赋值
ref 引用类型赋值
-->

IoC创建对象方式

  • 使用无参构造创建对象【默认】
  • 使用有参构造创建对象【Spring提供方法(基于实体类中的有参构造实现)】
    1. 根据下标赋值(从0开始)
<bean class="cn.iris.pojo.User" id="user">
<!--1. 下标赋值(从0开始)-->
<constructor-arg index="0" value="Iris"/>
</bean>
    1. 根据类型赋值(不建议使用)
<!--2. 根据参数类型比对赋值-->
<constructor-arg type="java.lang.String" value="iris"/>
    1. 根据参数名赋值
<!--3. 根据参数名赋值-->
<constructor-arg name="name" value="iris"/>

总结:在配置文件加载时,容器中管理的对象就已经初始化

Spring学习笔记-Hello Spring的更多相关文章

  1. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  2. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  3. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  4. Spring学习笔记之Spring概述

    概述   Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...

  5. Spring学习笔记之五----Spring MVC

    Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...

  6. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

  7. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  8. spring学习笔记之spring框架本质

    Spring框架的本质是,开发者在Spring配置文件中使用XML元素进行配置,实际驱动Spring执行相应的代码: 使用<bean.../>元素,实际启动Spring执行无参或有参构造函 ...

  9. Spring学习笔记2:Spring HelloWorld

    1:IntelliJ新建Maven工程 2:pom文件加入Spring依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  10. [Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction

    1.Spring中的数据库支持 把具有相同功能的代码模板抽取到一个工具类中.2.关于jdbc template的应用 jdbcTemplate模板操作类,把访问jdbc的模板抽取到template中, ...

随机推荐

  1. Terraform模块Module管理,聚合资源的抽取与复用

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  2. 16、如何将安装在chrome上的插件(扩展程序)打包成".crx"文件

    1.打开扩展程序: 2.打开开发者模式并选择要打包的插件: 3.打包扩展程序: (1) (2) (3)

  3. 8、oracle密码过期设置

    8.1.登录到oracle实例: [oracle@slave-node2 ~]$ echo $ORACLE_SID orcl [oracle@slave-node2 ~]$ sqlplus sys/1 ...

  4. React中使用react-file-viewer,实现预览office文件(pdf,word,xlsx等文件)前端实现

    最近做一个项目要求在前端浏览器可以直接打开office文件(pdf,doc,xlsx等文件).pdf浏览器可以直接打开(可以直接用a标签href="文件地址"或者iframe标签s ...

  5. MinIO关闭公开桶的列表展示(S3 browser)

    MinIO通过配置桶策略关闭列表展示,以下为操作教程. 下载:s3browser官网 安装完成S3 browser后,添加账号 修改桶policy,选择桶public右键 删除 s3:ListBuck ...

  6. Leetcode No.121 Best Time to Buy and Sell Stock(c++实现)

    1. 题目 1.1 英文题目 You are given an array prices where prices[i] is the price of a given stock on the it ...

  7. 友链QAQ

    队爷 : 天仙队爷%%% H 队:分块带师%%% KBY :比我小还比我强

  8. 北京大公司:你是熟悉Map集合吗?

    <对线面试官>系列目前已经连载30篇啦,这是一个讲人话面试系列 [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 &am ...

  9. python 最大公约数 最小公倍数

    def gongyueshu(m,n): if m<n: m,n=n,m elif m==n: return m if m/n==int(m/n): return n else: for i i ...

  10. ubuntu平台下,字符集的转换命令iconv

    iconv命令格式 iconv -f 源字符集(要转换文件的字符集) -t 目标字符集  file iconv -f gb18030 -t utf-8 file 默认情况下,不改变原文件,输出到屏幕. ...