一、认识Spring
了解一个技术要先知道它是干嘛的,我的理解上Spring的本质就是一个对象容器。我们把对象交给Spring创建和管理(IOC)和在用到对象的时候由Spring帮我们从容器中取出并注入(DI)到我们使用的地方。
- IOC(Inversion of Control):控制反转;将对象的创建方式由开发人员转移到Spring的框架中。
- DI(Dependency Injection):依赖注入;由Spring将容器中的对象注入到你要使用的对象引用。
这两个核心技术的实现就成就了Spring的大半江山。
二、Spring项目中的jar包认识(简单)

-
Spring-core
这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类。
-
spring-beans.jar
这个jar文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI支持,引入spring-core.jar及spring-beans.jar文件就可以了。
-
spring-expression.jar
这个jar文件是Spring的表达式。
-
spring-aop.jar
这个jar文件包含在应用中使用Spring的AOP特性时所需的类。使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。
-
spring-context.jar
这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类,JDNI所需的全部类,UI方面的用来与模板(Templating)引擎如Velocity、FreeMarker、JasperReports集成的类,以及校验Validation方面的相关类。
-
spring-dao.jar
这个jar文件包含Spring DAO、Spring Transaction进行数据访问的所有类。为了使用声明型事务支持,还需在自己的应用里包含spring-aop.jar。
-
spring-hibernate.jar
这个jar文件包含Spring对Hibernate 2及Hibernate 3进行封装的所有类。
-
spring-jdbc.jar
这个jar文件包含对Spring对JDBC数据访问进行封装的所有类。
-
spring-orm.jar
这个jar文件包含Spring对DAO特性集进行了扩展,使其支持 iBATIS、JDO、OJB、TopLink,因为Hibernate已经独立成包了,现在不包含在这个包里了。这个jar文件里大部分的类都要依赖spring-dao.jar里的类,用这个包时你需要同时包含spring-dao.jar包。
-
spring-remoting.jar
这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。
-
spring-support.jar
这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。
-
spring-web.jar
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
-
spring-webmvc.jar
这个jar文件包含Spring MVC框架相关的所有类。包含国际化、标签、Theme、视图展现的FreeMarker、JasperReports、Tiles、Velocity、XSLT相关类。当然,如果你的应用使用了独立的MVC框架,则无需这个JAR文件里的任何类。
-
spring-mock.jar
这个jar文件包含Spring一整套mock类来辅助应用的测试。Spring测试套件使用了其中大量mock类,这样测试就更加简单。模拟HttpServletRequest和HttpServletResponse类在Web应用单元测试是很方便的。
三、Spring项目的简单搭建

package cn.demo.domain;
/**
*
* @ClassName: User
* @Description:TODO(定义User类)
* @date: 2018年12月2日 下午2:42:20
*/
public class User {
private String name;//姓名
private int age;//年龄
public User() {
super();
}
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}
<?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 name="user" class="cn.demo.domain.User">
<property name="name" value="XiaoMing"></property>
<property name="age" value="18"></property>
</bean>
</beans>
package cn.demo.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.demo.domain.User;
public class HelloSpring {
@Test
public void fun01(){
//创建Spring容器
ApplicationContext ac = new ClassPathXmlApplicationContext("application-context.xml");
//从容器获取User对象
User user = (User) ac.getBean("user");
//验证
System.out.println(user);
}
}
[图片上传失败...(image-f96d43-1543735360043)]
四、Spring对象的创建方式(三种)
-
Spring自己创建(常用)
-
静态工厂创建
-
动态工厂创建
五、Spring属性注入的方式
- 构造方法注入

-
set方法注入
-
简单类型的注入
- <property>标签注入
image.png
- p命名空间注入
-

-
复杂类型的注入
package cn.zw.domain; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Properties; public class CollectionBean { private Object[] arr; private List list; private Map map; private Properties props; public Properties getProps() { return props; } public void setProps(Properties props) { this.props = props; } 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; } @Override public String toString() { return "CollectionBean [arr=" + Arrays.toString(arr) + ", list=" + list + ", map=" + map + ", props=" + props + "]"; } }
<!-- 复杂类型的注入 -->
<bean name="collectionBean" class="cn.zw.domain.CollectionBean">
<!--
数组 :
1.数组中只需要注入一个值得话,当成简单类型注入就行
<property name="arr" ref="car"></property>
2.装多值的情况
-->
<property name="arr">
<array>
<value>tom</value>
<value>19</value>
<ref bean="car"/>
</array>
</property>
<!-- List
1.只需要注入一个值得话,当成简单类型注入就行
<property name="list" value="car"></property>
2.装多值的情况 -->
<property name="list">
<list>
<value>zhaowei</value>
<value>19</value>
<ref bean="car"/>
</list>
</property>
<!-- Map -->
<property name="map" >
<map>
<entry key="name" value="zhaowei"></entry>
<entry key="car" value-ref="car"></entry>
</map>
</property>
<!-- properties类型的注入 -->
<property name="props">
<props>
<prop key="name">zhaowei</prop>
</props>
</property>
</bean>
网友评论