目录
1、Spring 概念
2、Spring的IOC操作
3、IOC底层原理
4、IOC入门案例
5、Spring的bean管理(xml方式)
6、IOC和DI区别
7、Spring整合web项目原理
一、Spring 概念
1、spring是开源的轻量级框架
2、spring核心主要有两部分:
(1)aop :面向切面编程,扩展功能不是修改源代码实现
(2)ioc :控制反转: 把对象的创建不是通过new的方式实现,而是交给spring配置创建类对象
3、spring是一站式框架:spring在JavaEE三层结构中,每一层都提供不同的解决技术
web层:springMVC
service层:IOC
dao层:spring的jdbcTemplate
4、spring版本
spring4.x
二、Spring的IOC操作
1、把对象的创建直接交给spring进行管理
2、IOC操作两部分
(1)IOC的配置文件方式
(2)IOC的注解方式
三、IOC底层原理
1、IOC底层原理使用技术
(1)XML配置文件
(2)dom4j解析XML
(3)工厂设计模式
(4)反射
2、IOC实现原理
四、IOC入门案例
第一步、导入架包
(1)解压资料zip文件: spring-framework-4.2.4.RELEASE-dist.zip
jar特点:都有三个jar包:
(2)做spring基础功能的时候,导入四个核心jar包就可以了
(3)导入支持日志输出的jar包
第二步、创建类,在类里面创建方法
public class User {
public static void main(String[] args) {
// 原始方法
User user = new User();
user.add();
}
public void add () {
System.out.println("user add .............");
}
}
第三步、创建spring配置文件,配置创建类
(1)spring核心配置文件名称和位置不是固定的
建议放到src下面,官方建议 applicationContext.xml
(2)引入schema约束
xsd-configuration.html 文件最下面
(3)配置对象创建
bean1.xml
第四步、写代码测试对象创建
@Test
public void testUser () {
// 1 加载spring配置文件,根据其创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
// 2 得到配置创建的对象
User user = (User) context.getBean("user");
// 3 使用对象
System.out.println(user);
user.add();
}
五、spring的bean管理(xml方式)
1、bean实例化的方式
(1)在spring里面通过配置文件创建对象
(2)bean实例化三种方式
第一种 使用类的无参构造创建(重点)
类里面没有无参数的构造方法,会出现异常
第二种 使用静态工厂创建
创建静态的方法,返回类对象
第三种 使用示例工厂创建
创建非静态的方法,返回类对象
2、bean标签常用属性
(1)id属性
起名称,id属性值不能包含特殊字符
(2)class属性
创建对象所在类的全路径
(3)name属性
功能和id属性是一样的,id属性值不能包含特殊符号,但是name属性值可以包含特殊符号
(4)scope属性
3、属性注入介绍
(1)创建对象的时候,给类的属性设置值
(2)属性注入的三种方式
第一种 使用set方法注入
第二种 有参构造注入
第三种 使用接口注入
(3)在spring框架中,支持前两种注入方式
第一种 使用set方法注入
第二种 有参构造注入
(4)使用有参构造注入属性
(5) 使用set方法注入属性
4、注入对象类型属性(重点)
(1)创建service和dao类,在service得到dao对象
(2) 具体实现过程
1> 在service里面把dao作为类型属性
public class UserDao {
public void add () {
System.out.println("UserDao add ......");
}
}
2> 生成dao类型属性的set方法
public class UserService {
// 1 定义Dao类型属性
private UserDao userDao;
// 2 生成set方法
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add () {
System.out.println("UserService add ......");
userDao.add();
}
}
3> 配置文件中注入关系
<!-- 注入对象类型属性 -->
<bean id="userDao" class="cn.itcast.ioc.UserDao"></bean>
<bean id="userService" class="cn.itcast.ioc.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
5、p名称空间注入
(1)xml配置文件添加:
(2)配置
public class Person {
private String pName;
public void setpName(String pName) {
this.pName = pName;
}
public void method () {
System.out.println("pName -- " + pName);
}
}
<!-- p名称空间注入 -->
<!--
普通属性: p:属性名称=“”
对象属性: p:属性名称-ref=“”
-->
<bean id="person" class="cn.itcast.property.Person" p:pName="ZJM"></bean>
6、注入复杂类型属性
(1)数组
(2)List集合
(3)Map集合
(4)properties类型
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class MyPerson {
private String[] arr;
private List<String> list;
private Map<String, String> map;
private Properties properties;
public void setArr(String[] arr) {
this.arr = arr;
}
public void setList(List<String> list) {
this.list = list;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
}
<!-- 注入复杂类型属性 -->
<bean id="myPerson" class="cn.itcast.property.MyPerson">
<!-- 数组 -->
<property name="arr">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
<!-- list -->
<property name="list">
<list>
<value>111</value>
<value>222</value>
<value>333</value>
</list>
</property>
<!-- map -->
<property name="map">
<map>
<entry key="aaa" value="111"></entry>
<entry key="bbb" value="222"></entry>
</map>
</property>
<!-- properties -->
<property name="properties">
<props>
<prop key="driverclass">com.mysql.jdbc.driver</prop>
<prop key="username">root</prop>
</props>
</property>
</bean>
六、IOC和DI区别
1、IOC:控制反转,把对象创建交给spring进行配置
2、DI:依赖注入,向类里面的属性设置值
3、关系:依赖注入不能单独存在,需要在IOC的基础之上完成操作
七、spring整合web项目原理
1、加载spring核心配置文件
// 1 加载spring配置文件,根据其创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
但是,new对象,虽然功能可以实现,但效率很低
2、实现思想:把加载配置文件和创建对象过程,在服务器启动的时候完成
3、实现原理
1> ServletContext对象
2> 监听器
4、具体使用
在服务器启动时候,为每个项目创建一个ServletContext对象
在ServletContext对象创建时候,使用监听器可以具体到ServletContext对象在什么时候创建
使用监听器监听到ServletContext对象创建时候
加载spring配置文件,把配置文件中配置对象创建
把创建出来的对象放到ServletContext域对象里面(setAttribute方法)
获取对象时候,从ServletContext域对象得到(getAttribute方法)
扩展:
1、Servlet三大域对象:
https://www.cnblogs.com/taiguyiba/p/6130293.html
2、系统中的 StartupServlet