一.Spring 概念
1.spring是开源的轻量级框架
2.spring核心主要两部分:
(1)aop:面向切面编程,扩展功能不是修改源代码实现
(2)ioc:控制反转
一个类的非静态方法,在调用的时候,得先创建类的对象,new 对象,通过对象调用方法
在spring里面对象的创建不通过new 实现.而是交给spring配置创建类对象
3.spring是一站式框架
(1)spring 在javase三层结构中,每一层都提供不同的解决技术
web层: springMVC
service层: spring的ioc
dao层 : spring里面的jdbctemplate
4.spring版本
(1)hibernate5.x
(2)spring4.x
---------------------------------------------------------------------------------------------------------------------------
二.Spring的ioc(控制反转)操作
1.把对象的创建交给spring进行管理
2.ioc操作两部分:
(1)ioc配置文件方式
(2)ioc注解方式
IOC底层原理
1.ioc底层原理实用技术
(1)xml配置文件
(2)dom4j解决xml
(3)工厂设计模式
(4)反射
2.图片分析
---------------------------------------------------------------------------------------------------------------------------
三.IOC入门案例
第一步 导入jar包
(1)解压资料zip文件
jar特点:都有三个包
(2)做spring最基本功能的时候,导入四个核心的jar包就可以了
四个核心jar包:
Beans, core,context,spEL
第二步 创建类,在类里面创建方法
第三部 创建spring配置文件,配置创建类
(1)spring核心配置文件名称和位置不是固定的
建议放到src下面.官方建议applicationContext
(2)引入schema约束,
(3)创建配置文件
第四步 写代码测试对象创建
spring 的 bean管理 xml方式
bean实例化的方式
1.在spring里面通过配置文件创建对象
2.bean实例化三种方式实现
第一种 使用类的无参数构造器(重点)
类里面没有无参构造,出现下面异常
第二种 使用静态工场创建
(1)创建静态的方法,返回类对象
public static Bean2 getBean2(){
return new Bean2();
}
第三种 使用实例工厂创建
(1)创建非静态的方法,返回类对象
Bean标签常用属性
(1)id属性:起名称,id属性值名称任意命名
-id属性值,不能包含特殊符号
-根据id值得到配置对象
(2)class 属性:创建对象所在类的全路径
(3)name属性(现在不用了):功能和id属性是一样的,id属性值不能包含特殊符号,但是name可以
(4)scope属性: Bean的作用范围
singleton 默认值, 单例的
prototype 多例的
request 创建对象,将对象放到request域里面
session 创建对象把对象放到session域里
globalsession 创建对象把对象放到globalsession域里
属性注入
1.创建对象的时候,向类里面设置值
2属性注入的方式介绍(三种方式)
第一种 使用set方法注入
public class User{
private String name;
public void setName(String name){
this.name = name;
}
}
User user =new User();
user.setName("allen");
第二种 有参数构造注入
public class User{
private String name;
public User(String name){
this.name = name;
}
}
User user =new User("Mike");
第三种 使用接口注入(不常用)
public interface Dao{
public void delete(String name);
}
public class DaoIml implement Dao{
private String name;
public void delete(String name){
this.name= name'
}
}
Spring框架里面支持两种注入方式
(1)有参数构造注入
//有参数构造器
public PropertiesDemo1(String username) {
super();
this.username = username;
}
<!-- 使用有参数构造注入属性 -->
<bean id="demo" class="properties.PropertiesDemo1">
<!-- 使用有参构造注入 -->
<constructor-arg name="username" value="Tom Keen"></constructor-arg>
</bean>
(2)set方式注入
<!-- 使用set方法注入属性 -->
<bean id="book" class="properties.Book">
<!-- 注入属性值
name属性值:类里面定义的属性名称
value属性:设置具体的值
-->
<property name="bookname" value="Old Ocean"></property>
</bean>
注入对象类型属性(重点)
1.创建service类和dao类
(1)在service得到dao类
P名称空间注入
<!--p名称空间注入 -->
<bean id="person" class="bean1Demo.Person" p:name="lucy"></bean>
xmlns:p="http://www.springframework.org/schema/p"
注入复杂类型属性
IOC和DI的区别
(1)IOC:控制反转,把对象创建交给spring进行配置
(2)DI: 依赖注入,向类里面的属性中设置值
(3)关系:依赖注入不能单独存在,需要在ioc基础上完成操作