文章目录

  • 一.HelloSpring
  • 二.IOC创建对象方式
    • 2.1 无参构造创建
    • 2.2 有参构造创建
  • 三. Spring配置
    • 3.1 别名alias
    • 3.2 bean配置
    • 3.3 import

一.HelloSpring

1.编写一个实体类

public class Hello {private String str;public String getStr() {return str;}public void setStr(String str) {this.str = str;}@Overridepublic String toString() {return "Hello{" +"str='" + str + '\'' +'}';}
}

2.编写元数据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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--bean就是java对象 , 由Spring创建和管理id相当于new的对象名,class是对象。name是属性名。--><bean id="hello" class="com.zh.pojo.Hello"><property name="str" value="Spring"/></bean></beans>

3.测试

@Testpublic void test1(){//解析beans.xml文件 , 生成管理相应的Bean对象ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//getBean : 参数即为spring配置文件中bean的id Hello hello = (Hello) context.getBean("hello");System.out.println(hello);}


总结:

  • hello 对象是由Spring创建的
  • hello 对象的属性是由Spring容器设置的

这个过程就叫控制反转 :

  • 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的

  • 反转 : 程序本身不创建对象 , 而变成被动的接收对象 .

依赖注入 : 就是利用set方法来进行注入的.

IOC是一种编程思想,由主动的编程变成被动的接收

修改上篇博客的User案例
1.新增一个beans.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 id="UserDaoImpl" class="com.zh.dao.UserDaoImpl"/>
<bean id="UserMySqlImpl" class="com.zh.dao.UserDaoMySqlImpl"/>
<bean id="UserDaoOracleImpl" class="com.zh.dao.UserDaoOracleImpl"/><bean id="UserServiceImpl" class="com.zh.service.UserServiceImpl"><!--注意: 这里的name并不是属性 , 而是set方法后面的那部分 , 首字母小写--><!--引用另外一个bean , 不是用value 而是用 ref--><property name="userDao" ref="UserDaoOracleImpl"/></bean></beans>

2.测试

  @Testpublic void test1(){ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");UserServiceImpl userServiceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");userServiceImpl.getUser();}


从此彻底不用在程序中去改动了 , 要实现不同的操作 , 只需要在xml配置文件中进行修改 , 所谓的IOC就是对象由Spring 来创建 , 管理 , 装配 !

二.IOC创建对象方式

2.1 无参构造创建

1.创建实体类

public class User {private String name;public User( ) {System.out.println("User无参构造方法");}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}
}

2.beans.xml配置

<bean id="user" class="com.zh.pojo.User"><property name="name" value="伊泽瑞尔"/></bean>

3.测试

@Testpublic void test1(){//解析beans.xml文件 , 生成管理相应的Bean对象ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");User user = (User) context.getBean("user");System.out.println(user.getName());}


由此可知无参构造方法在输出之前就被创建了。
在配置文件加载的时候。其中管理的对象都已经初始化了!

2.2 有参构造创建

1.实体类

public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +'}';}
}

2.有3中方法编写beans.xml

(1)根据下标设置

<bean id="user" class="com.zh.pojo.User"><!-- index指构造方法 , 下标从0开始 --><constructor-arg index="0" value="伊泽瑞尔"/></bean>

(2)根据参数类型设置

<bean id="user" class="com.zh.pojo.User"><constructor-arg type="java.lang.String" value="伊泽瑞尔"/></bean>

(3)根据参数名字设置

<bean id="user" class="com.zh.pojo.User"><!-- name指参数名 --><constructor-arg name="name" value="伊泽瑞尔"/></bean>

一般用第一种和第三种方式,第二种一般不用。

三. Spring配置

3.1 别名alias

alias 设置别名 , 为bean设置别名 , 可以设置多个别名

<!--设置别名:在获取Bean的时候可以使用别名获取-->
<alias name="userT" alias="userNew"/>

3.2 bean配置

<!--bean就是java对象,由Spring创建和管理--><!--id 是bean的标识符,要唯一,如果没有配置id,name就是默认标识符如果配置id,又配置了name,那么name是别名name可以设置多个别名,可以用逗号,分号,空格隔开如果不配置id和name,可以根据applicationContext.getBean(.class)获取对象;class是bean的全限定名=包名+类名
-->
<bean id="hello" name="hello2 h2,h3;h4" class="com.kuang.pojo.Hello"><property name="name" value="Spring"/>
</bean>

3.3 import

团队的合作通过import来实现 .

<import resource="{path}/beans.xml"/>

(Spring)Spring的使用相关推荐

  1. ssm 上传图片到mysql_ssm(Spring+Spring MVC+MyBatis)+Web Uploader开发图片文件上传实例,支持批量上传,拖拽上传,复制粘贴上传...

    项目描述 ssm开发一个上传图片的项目 用百度的插件 Web Uploader 上传,不会的去它的官网找API文档 官网的API文档还是比较 坑的.... 百度插件  Web Uploader 上传文 ...

  2. Spring - Spring Boot Spring Cloud

    Spring -> Spring Boot > Spring Cloud 这几天刚刚上班,公司用的是Spring Cloud,接触不多.我得赶快学起来. 想学习就必须得知道什么是微服务,什 ...

  3. java的hr样式,spring+spring mvc+mybatis开发java医院HR人事管理系统(加强版本+ shiro)...

    项目描述 java web医院HR后台管理系统(增加shiro) 运行环境 jdk7+tomcat7+mysql+MyEclipse+maven 项目技术(必填) spring+spring mvc+ ...

  4. ssm(Spring+Spring mvc+mybatis)

    在不久的之前我写了一篇ssh(Spring+Spring mvc+hibernate)的文章,感兴趣的可以去这里看看~ 今天我来写一下ssm的增删改欧查案例: 数据库:mysql 浏览器:火狐浏览器 ...

  5. ssh(Spring+Spring mvc+hibernate)简单增删改查案例

    最近和spring mvc干上了,各种奇葩问题,各种解决...现在想想这历程还挺艰辛的,好了,不在这墨迹了,我们进入正题. 据说,现在Springmvc很流行,既然很流行就搞搞它,看看是个什么鬼,于是 ...

  6. Spring3 MVC+Spring+Spring Jdbc实现的权限管理系统,可以控制到增删改查

    前端框架: Jquery1.6+easyui1.3.1+zTree3.4 后端Java框架:Spring3 MVC+Spring+Spring Jdbc三层架构,大量采用注解 Dao层:通过对Spri ...

  7. Spring: Spring 从xml获取bean

    1.美图 2.案例 SpringBoot : BeanFactory和FactoryBean的区别 3.前言 Spring : Spring的ApplicationContext接口 上面一篇博客讲解 ...

  8. Spring/Spring boot正确集成Quartz及解决@Autowired失效问题

    Spring/Spring boot正确集成Quartz及解决@Autowired失效问题 参考文章: (1)Spring/Spring boot正确集成Quartz及解决@Autowired失效问题 ...

  9. 基于Spring + Spring MVC + Mybatis 高性能web构建

    一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...

  10. ssm整合说明与模板-Spring Spring MVC Mybatis整合开发

    ssm整合说明 spring+spring mvc+mybatis 说明 源码下载 由于之前存在ssh框架,spring+struts+hibernate,其中spring负责aop与ioc,所以一般 ...

最新文章

  1. 为什么你的工作经验不值钱
  2. 服务器架设笔记——打通MySQL和Apache
  3. Keepalived+LVS+Nginx负载均衡之高可用
  4. 刘道成mysql视频教程_燕十八刘道成Mysql 系列视频教程 Mysql视频教程打包下载
  5. 智能算法把奥巴马识别成白人,AI也学会歧视了?
  6. 哈佛经济学教授卧底贫民窟8年,揭开穷人最大真相:这比贫穷更可怕
  7. python内置方法怎么使用_python中的常用内置方法
  8. boost线程(二)
  9. 【CCF】201803-1 跳一跳
  10. 两个局域网如何互联_如何申请使用三大航司的机上wifi服务?
  11. Django 模板中使用 Ajax POST
  12. Vue之webpack之基本使用
  13. python property使用
  14. Caffe傻瓜系列(11):caffe中的lr_policy选择
  15. ASP.NET 参数传递,长度限制,及使用注意事项。
  16. Django 官方文档中文3.2 4.0
  17. win10远程桌面连接凭据怎么设置_如何解决Win10远程桌面提示你的凭证不工作?...
  18. C++Qt入门(1)---Qt简介,第一个Qt程序,Qt按钮
  19. android 内存至少一半,极客修:为什么iPhone比安卓内存小,却更流畅?
  20. 记一次批量定时抓取微信公众号文章的实现

热门文章

  1. 波卡链Substrate (6)Babe协议二“分配slot机制”
  2. 区块链BaaS云服务(10)用友iuap区块链平台
  3. 谈谈你对面向过程与面向对象的理解
  4. buu [BJDCTF 2020]这是base??
  5. 05-cache相关的系统寄存器
  6. armv8/armv9的简介-学习这一篇就够了
  7. Android fingerprint指纹/face人脸代码导读
  8. linux kernel使用技巧
  9. 密码学基础知识(五)序列密码
  10. ReverseMe-120(base64解码表) 逆向寒假生涯(21/100)