spring教程(一):简单实现
2018-06-18 03:34:13来源:未知 阅读 ()
一、概念介绍
1. 一站式框架:管理项目中的对象。spring框架性质是容器(对象容器)
2. 核心是控制反转(IOC)和面向切面(AOP)
IOC:反转控制--将创建对象的方式反转
自己创建、维护对象-->由spring完成创建、注入
反转控制就是反转了对象的创建方式,从自己创建反转给了程序
DI:依赖注入--实现IOC需要DI做支持
注入方式:set、构造方法、字段 注入
注入类型:值类型(8大数据类型)、引用类型(对象) 注入
二、简单实现
1.导包
首先根据图找到需要的jar包,再导入日志包
导入包后项目结构如图所示
2.创建一个对象 bean
1 package com.dic.bean; 2 3 public class User { 4 5 private String name; 6 private String age; 7 8 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 public String getAge() { 16 return age; 17 } 18 public void setAge(String age) { 19 this.age = age; 20 } 21 22 }
3.配置核心 xml 文件
对名字、位置没有具体要求,一般命名为 applicationContext.xml 放置在 src 下
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> 4 5 6 <!-- 将user对象交给spring --> 7 <!-- 8 name:调用时用的名字 9 class:路径 10 --> 11 <bean name="user" class="com.dic.bean.User"></bean> 12 13 14 </beans>
4. junit 测试以下代码,控制台打印不为空且无报错即为成功
1 package com.dic.text; 2 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 import com.dic.bean.User; 8 9 public class Demo1 { 10 11 @Test 12 public void fun1(){ 13 14 //1 创建容器对象 15 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); 16 //2 向容器"要"user对象 17 User u = (User) ac.getBean("user"); 18 //3 打印user对象 19 System.out.println(u); 20 21 22 } 23 24 }
三、<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>
四、代码整理
1 package com.dic.bean; 2 3 public class Car { 4 5 private String name; 6 private String color; 7 8 public String getName() { 9 return name; 10 } 11 public void setName(String name) { 12 this.name = name; 13 } 14 public String getColor() { 15 return color; 16 } 17 public void setColor(String color) { 18 this.color = color; 19 } 20 21 }
1 package com.dic.bean; 2 3 public class User { 4 5 private String name; 6 private String age; 7 8 9 public String getName() { 10 return name; 11 } 12 public void setName(String name) { 13 this.name = name; 14 } 15 public String getAge() { 16 return age; 17 } 18 public void setAge(String age) { 19 this.age = age; 20 } 21 22 }
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; } }
1 package com.dic.bean; 2 3 public class User2 { 4 5 private String name; 6 private String age; 7 private Car car; 8 9 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 public String getAge() { 17 return age; 18 } 19 public void setAge(String age) { 20 this.age = age; 21 } 22 public Car getCar() { 23 return car; 24 } 25 public void setCar(Car car) { 26 this.car = car; 27 } 28 29 }
1 package com.dic.bean; 2 3 public class User3 { 4 5 private String name; 6 private String age; 7 private Car car; 8 9 10 public User3(String name, Car car) { 11 System.out.println("构造方式"); 12 this.name = name; 13 this.car = car; 14 } 15 16 17 //出现同参数名 18 public User3(Integer name, Car car) { 19 System.out.println("同名参数构造方式"); 20 this.name = name+""; 21 this.car = car; 22 } 23 24 }
1 package com.dic.bean; 2 3 import java.util.List; 4 import java.util.Map; 5 import java.util.Properties; 6 7 public class User4 { 8 9 private Object[] arr; 10 private List list; 11 private Map map; 12 private Properties pro; //实际上就是一个map 13 14 15 16 public Object[] getArr() { 17 return arr; 18 } 19 public void setArr(Object[] arr) { 20 this.arr = arr; 21 } 22 public List getList() { 23 return list; 24 } 25 public void setList(List list) { 26 this.list = list; 27 } 28 public Map getMap() { 29 return map; 30 } 31 public void setMap(Map map) { 32 this.map = map; 33 } 34 public Properties getPro() { 35 return pro; 36 } 37 public void setPro(Properties pro) { 38 this.pro = pro; 39 } 40 41 42 }
1 package com.dic.text; 2 3 import org.junit.Test; 4 import org.springframework.context.ApplicationContext; 5 import org.springframework.context.support.ClassPathXmlApplicationContext; 6 7 import com.dic.bean.User; 8 import com.dic.bean.User1; 9 import com.dic.bean.User2; 10 import com.dic.bean.User3; 11 12 public class Demo1 { 13 14 @Test 15 public void fun1(){ 16 17 //1 创建容器对象 18 ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); 19 //2 向容器"要"user对象 20 User u = (User) ac.getBean("user"); 21 //3 打印user对象 22 System.out.println(u); 23 24 User1 u1 = (User1) ac.getBean("user1"); 25 System.out.println(u1); 26 27 User2 u2 = (User2) ac.getBean("user2"); 28 System.out.println(u2); 29 30 31 User3 u3 = (User3) ac.getBean("user3"); 32 System.out.println(u3); 33 34 } 35 36 }
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd "> 4 5 6 <!-- bean元素:使用该元素描述需要spring容器管理的对象 --> 7 <!-- 8 name:调用时用的名字 9 class:路径 10 id:与name属性作用一样但名称不可重复且不能使用特殊字符 11 scope属性: 12 singleton(默认值):单例对象,在spring容器中启动时创建,只存在一个 13 prototype:多例原型,每次在获得时才会创建,每次都创建一个新的 14 --> 15 <bean name="user" class="com.dic.bean.User"></bean> 16 17 18 <!-- set注入 --> 19 <bean name="user1" class="com.dic.bean.User1"> 20 <property name="name" value="tom"></property> 21 <property name="age" value="18"></property> 22 </bean> 23 24 <!-- 对象注入 --> 25 <!-- 1. --> 26 <bean name="car" class="com.dic.bean.Car"> 27 <property name="name" value="的健康的"></property> 28 <property name="color" value="yellow"></property> 29 </bean> 30 <!-- 2. --> 31 <bean name="user2" class="com.dic.bean.User2"> 32 <property name="name" value="tom"></property> 33 <property name="age" value="18"></property> 34 <property name="Car" ref="car"></property> 35 </bean> 36 37 38 <!-- 构造方法注入 --> 39 <bean name="user3" class="com.dic.bean.User3"> 40 <!-- 出现同名参数 用type指定参数类型即可 --> 41 <constructor-arg name="name" value="11" type="java.lang.Integer"></constructor-arg> 42 <constructor-arg name="car" ref="car"></constructor-arg> 43 </bean> 44 45 46 <!-- 复杂类型注入 使用set方式 --> 47 48 <bean name="user4" class="com.dic.bean.User4"> 49 <!-- array --> 50 <!-- 如果数组中只有一个值,也可使用 name value --> 51 <property name="arr"> 52 <array> 53 <value>tom</value> 54 <value>jerry</value> 55 <ref bean="user2"/> 56 </array> 57 </property> 58 <!-- list --> 59 <property name="list"> 60 <list> 61 <value>jack</value> 62 <value>rose</value> 63 <ref bean="user2" /> 64 </list> 65 </property> 66 <!-- map --> 67 <property name="map"> 68 <map> 69 <entry key="url" value="jdbc:mysql:///crm" ></entry> 70 <entry key="user" value-ref="user" ></entry> 71 <entry key-ref="user3" value-ref="user2" ></entry> 72 </map> 73 </property> 74 <!-- pro --> 75 <property name="pro"> 76 <props> 77 <prop key="driverClass">com.jdbc.mysql.Driver</prop> 78 <prop key="userName">root</prop> 79 <prop key="password">root</prop> 80 </props> 81 </property> 82 </bean> 83 84 85 86 87 <!-- 导入其他配置文件 88 <import resource="com/dic/bean/applicationContext.xml"/> 89 --> 90 91 </beans>
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:C3P0连接池、DBCP连接池
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash