转:https://www.cnblogs.com/Lemon-i/p/8398263.html

 一、概念介绍

1. 一站式框架:管理项目中的对象。spring框架性质是容器(对象容器)

2. 核心是控制反转(IOC)和面向切面(AOP)

IOC:反转控制--将创建对象的方式反转

自己创建、维护对象-->由spring完成创建、注入

反转控制就是反转了对象的创建方式,从自己创建反转给了程序

DI:依赖注入--实现IOC需要DI做支持

注入方式:set、构造方法、字段 注入

注入类型:值类型(8大数据类型)、引用类型(对象) 注入

二、简单实现

1.导包

首先根据图找到需要的jar包,再导入日志包

导入包后项目结构如图所示

2.创建一个对象 bean

 User.xml
package com.dic.bean;
public class User { private String name;
private String age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
User.xml

3.配置核心 xml 文件

对名字、位置没有具体要求,一般命名为 applicationContext.xml 放置在 src 下

 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!-- 将user对象交给spring -->
<!--
name:调用时用的名字
class:路径
-->
<bean name="user" class="com.dic.bean.User"></bean> </beans>
applicationContext.xml

4. junit 测试以下代码,控制台打印不为空且无报错即为成功

 Demo1.java
package com.dic.text;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.dic.bean.User;
public class Demo1 { @Test
public void fun1(){ //1 创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 向容器"要"user对象
User u = (User) ac.getBean("user");
//3 打印user对象
System.out.println(u); }
}
Demo1.java

三、<bean>元素详解    注释都写在代码里,也可以直接看第四部分

1. 元素解释

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> <!-- bean元素:使用该元素描述需要spring容器管理的对象 -->
<!--
name:调用时用的名字
class:路径
id:与name属性作用一样但名称不可重复且不能使用特殊字符
scope属性:
singleton(默认值):单例对象,在spring容器中启动时创建,只存在一个
prototype:多例原型,每次在获得时才会创建,每次都创建一个新的
-->
<bean name="user" class="com.dic.bean.User></bean> </beans>

2. 模块化配置:即将bean分散在多个文件中配置,在 applicationContext.xml 中添加一句引用即可

<!-- 导入其他spring配置文件 -->
<import resource="com/dic/bean/applicationContext.xml"/>

3. 属性注入之 set 注入

分为 set 注入、对象注入两种,在 xml 中注入内容如下

<!-- set注入  -->
<bean name="user1" class="com.dic.bean.User1">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
</bean> <!-- 对象注入 -->
<!-- 1. -->
<bean name="car" class="com.dic.bean.Car">
<property name="name" value="的健康的"></property>
<property name="color" value="yellow"></property>
</bean>
<!-- 2. -->
<bean name="user2" class="com.dic.bean.User2">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
<property name="Car" ref="car"></property>
</bean>

4. 属性注入之构造方式注入

1. 在 User3.java 中添加构造方法

public User3(String name, Car car) {
System.out.println("构造方式");
this.name = name;
this.car = car;
}

2. 在 applicationContext.xml 中添加配置  注意赋值标签不一样

     <!-- 构造方法注入    -->
<bean name="user3" class="com.dic.bean.User3">
<constructor-arg name="name" value="嗯哼"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>

构造方式注意:出现同名参数时指定参数类型

<bean name="user3" class="com.dic.bean.User3">
<!-- 出现同名参数 用type指定参数类型即可 -->
<constructor-arg name="name" value="11" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>

5. 复杂类型注入

复杂的类型注入,如:数组、list、map、properties

 1      <!-- 复杂类型注入  使用set方式   -->
2
3 <bean name="user4" class="com.dic.bean.User4">
4 <!-- array -->
5 <!-- 如果数组中只有一个值,也可使用 name value -->
6 <property name="arr">
7 <array>
8 <value>tom</value>
9 <value>jerry</value>
10 <ref bean="user2"/>
11 </array>
12 </property>
13 <!-- list -->
14 <property name="list">
15 <list>
16 <value>jack</value>
17 <value>rose</value>
18 <ref bean="user2" />
19 </list>
20 </property>
21 <!-- map -->
22 <property name="map">
23 <map>
24 <entry key="url" value="jdbc:mysql:///crm" ></entry>
25 <entry key="user" value-ref="user" ></entry>
26 <entry key-ref="user3" value-ref="user2" ></entry>
27 </map>
28 </property>
29 <!-- pro -->
30 <property name="pro">
31 <props>
32 <prop key="driverClass">com.jdbc.mysql.Driver</prop>
33 <prop key="userName">root</prop>
34 <prop key="password">root</prop>
35 </props>
36 </property>
37 </bean>

四、代码整理

package com.dic.bean;

public class Car {

private String name;
private String color;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}

}

Car.java

package com.dic.bean;

public class User {

private String name;
private String age;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}

}

User.java

package com.dic.bean;

public class User1 {

private String name;
private String age;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}

}

User1.java

package com.dic.bean;

public class User2 {

private String name;
private String age;
private Car car;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Car getCar() {
return car;
}
public void setCar(Car car) {
this.car = car;
}

}

User2.java

package com.dic.bean;

public class User3 {

private String name;
private String age;
private Car car;

public User3(String name, Car car) {
System.out.println("构造方式");
this.name = name;
this.car = car;
}

//出现同参数名
public User3(Integer name, Car car) {
System.out.println("同名参数构造方式");
this.name = name+"";
this.car = car;
}

}

User3.java

package com.dic.bean;

import java.util.List;
import java.util.Map;
import java.util.Properties;

public class User4 {

private Object[] arr;
private List list;
private Map map;
private Properties pro; //实际上就是一个map

public Object[] getArr() {
return arr;
}
public void setArr(Object[] arr) {
this.arr = arr;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public Properties getPro() {
return pro;
}
public void setPro(Properties pro) {
this.pro = pro;
}

}

User4.java

package com.dic.text;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dic.bean.User;
import com.dic.bean.User1;
import com.dic.bean.User2;
import com.dic.bean.User3;

public class Demo1 {

@Test
public void fun1(){

//1 创建容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
//2 向容器"要"user对象
User u = (User) ac.getBean("user");
//3 打印user对象
System.out.println(u);

User1 u1 = (User1) ac.getBean("user1");
System.out.println(u1);

User2 u2 = (User2) ac.getBean("user2");
System.out.println(u2);

User3 u3 = (User3) ac.getBean("user3");
System.out.println(u3);

}

}

Demo1.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">

<!-- bean元素:使用该元素描述需要spring容器管理的对象 -->
<!--
name:调用时用的名字
class:路径
id:与name属性作用一样但名称不可重复且不能使用特殊字符
scope属性:
singleton(默认值):单例对象,在spring容器中启动时创建,只存在一个
prototype:多例原型,每次在获得时才会创建,每次都创建一个新的
-->
<bean name="user" class="com.dic.bean.User"></bean>

<!-- set注入 -->
<bean name="user1" class="com.dic.bean.User1">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
</bean>

<!-- 对象注入 -->
<!-- 1. -->
<bean name="car" class="com.dic.bean.Car">
<property name="name" value="的健康的"></property>
<property name="color" value="yellow"></property>
</bean>
<!-- 2. -->
<bean name="user2" class="com.dic.bean.User2">
<property name="name" value="tom"></property>
<property name="age" value="18"></property>
<property name="Car" ref="car"></property>
</bean>

<!-- 构造方法注入 -->
<bean name="user3" class="com.dic.bean.User3">
<!-- 出现同名参数 用type指定参数类型即可 -->
<constructor-arg name="name" value="11" type="java.lang.Integer"></constructor-arg>
<constructor-arg name="car" ref="car"></constructor-arg>
</bean>

<!-- 复杂类型注入 使用set方式 -->

<bean name="user4" class="com.dic.bean.User4">
<!-- array -->
<!-- 如果数组中只有一个值,也可使用 name value -->
<property name="arr">
<array>
<value>tom</value>
<value>jerry</value>
<ref bean="user2"/>
</array>
</property>
<!-- list -->
<property name="list">
<list>
<value>jack</value>
<value>rose</value>
<ref bean="user2" />
</list>
</property>
<!-- map -->
<property name="map">
<map>
<entry key="url" value="jdbc:mysql:///crm" ></entry>
<entry key="user" value-ref="user" ></entry>
<entry key-ref="user3" value-ref="user2" ></entry>
</map>
</property>
<!-- pro -->
<property name="pro">
<props>
<prop key="driverClass">com.jdbc.mysql.Driver</prop>
<prop key="userName">root</prop>
<prop key="password">root</prop>
</props>
</property>
</bean>

<!-- 导入其他配置文件
<import resource="com/dic/bean/applicationContext.xml"/>
-->

</beans>

applicationContext.xml

spring教程(一):简单实现(转)的更多相关文章

  1. Spring教程检视阅读

    Spring教程检视阅读 地址 可供参考的教程 <菜鸟学 SSH> <Spring Boot 那些事> <初识 Spring Security> <Sprin ...

  2. 13、Spring教程之全部(包括所有章节)

    Spring 教程 1.Spring概述 简介 Spring : 春天 --->给软件行业带来了春天 2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架. ...

  3. Spring Security4.X 简单实例介绍

    简介 本例子采用的是SpringMVC.SpringSecurity和Spring整合的简单使用 使用gradle搭建的项目(gradle比maven更加便捷),可以自行了解 web.xml配置 &l ...

  4. 使用Spring缓存的简单Demo

    使用Spring缓存的简单Demo 1. 首先创建Maven工程,在Pom中配置 <dependency> <groupId>org.springframework</g ...

  5. 《zw版·Halcon-delphi系列原创教程》简单的令人发指,只有10行代码的车牌识别脚本

    <zw版·Halcon-delphi系列原创教程>简单的令人发指,只有10行代码的车牌识别脚本 简单的令人发指,只有10行代码的车牌识别脚本      人脸识别.车牌识别是opencv当中 ...

  6. Spring依赖注入 --- 简单使用说明

    Spring依赖注入 --- 简单使用说明 本文将对spring依赖注入的使用做简单的说明,enjoy your time! 1.使用Spring提供的依赖注入 对spring依赖注入的实现方法感兴趣 ...

  7. spring+springMVC+mybatis简单整合

    spring+springMVC+mybatis简单整合, springMVC框架是spring的子项目,所以框架的整合方式为,spring+Mybatis或springMVC+mybatis. 三大 ...

  8. Playmaker全面实践教程之简单的使用Playmaker示例

    Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...

  9. Spring Boot项目简单上手+swagger配置+项目发布(可能是史上最详细的)

    Spring Boot项目简单上手+swagger配置 1.项目实践 项目结构图 项目整体分为四部分:1.source code 2.sql-mapper 3.application.properti ...

  10. Spring boot 注解简单备忘

    Spring boot 注解简单备忘 1.定义注解 package com.space.aspect.anno;import java.lang.annotation.*; /** * 定义系统日志注 ...

随机推荐

  1. Day03 知识点

    一.单行注释与多行注释 # 用来标记不运行的程序 pycharm 快捷键 ctrl+/ 可以在程序上方 也可以在程序后面 (PEP8) 多行注释 用三引号,一般推荐三双引号来做注释. 二.数据类型 ( ...

  2. asp.net core WebAPI学习以及 发布(***入门学习)

    A asp.net Core 系列[一]——创建Web应用 asp.net Core 系列[二]—— 使用 ASP.NET Core 和 VS2017 for Windows 创建 Web API a ...

  3. my23_pxc其中一个节点重建记录

    PXC报废了一个节点,时间大概在周五,而此时故障的数据库节点比较多,警告信息也成百上千,此信息混合于已有的故障节点信息中,没有被及时发现:然后周六.周日各报废一个,在周一的时候,业务已经没有节点可以写 ...

  4. Python入妖5-----正则的基本使用

    什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达对字符的一种过滤逻辑. 正则并不是pyth ...

  5. Javascript各种事件汇总

    https://www.cnblogs.com/diligenceday/p/4190173.html#undefined https://www.cnblogs.com/starof/p/40663 ...

  6. pod基本操作

    目录 创建Pod 查询Pod 删除Pod 更新Pod @(kernetes虚拟化学习)[pod基本操作] pod基本操作 ---- 创建Pod kubectl create -f test_pod.y ...

  7. 2019.03.20 读书笔记 as is 以及重写隐式/显示

    强转.as is 的用法 强制转换类型有两种:子类转基类,重写隐式(implicit )\显示(explicit) 转换操作符 class myclass { private int value; p ...

  8. Java基础15-数组实例学生管理系统

    import java.util.Scanner; public class Student{ public static void main(String[] args){ Scanner in=n ...

  9. Linux下wget下载软件小技巧以及安装jdk、tomcat与ftp服务器

    一.ftp的安装 装个ftp搞了一下午,感觉以前没那么麻烦的呀,结果到晚上才发现是实验室网的问题,换连手机的热点马上可以了,真是尴尬,把基本安装步骤记录一下: 1.检查安装vsftpd软件 使用如下命 ...

  10. ASP.NET操作DataTable各种方法

    转:http://www.cnblogs.com/isking/p/6178268.html http://www.cnblogs.com/sntetwt/p/3496477.html public ...