Spring概述
1. Spring概述
Spring是开源的轻量级框架
1. Spring核心两部分
(1) AOP:面向切面编程,扩展功能不是修改源代码
(2) IoC:控制反转,对象的创建不是通过new的方式,而是交给Spring配置创建类对象
2. Spring一站式框架
在JavaEE的三层结构中,每一层都提供了不同的解决技术
(1)web层:SpringMVC
(2)service层:Spring的IoC
(3)dao层:Spring的JdbcTemplate
3. Spring版本
Spring4.x
2. Spring入门
1. Spring的IoC操作:
把对象的创建交给Spring进行管理
IoC操作分成两部分:
(1)IoC的配置文件方式
(2)IoC的注解方式
2. Ioc底层原理
(1)IoC底层原理使用的技术
(a)XML配置文件
(b)dom4j解析XML
(c)工厂设计模式
(d)反射
(2)原理图
3. IoC入门
(1)导入Jar包
(a)Spring的最基本功能只要导入4个Jar包:
Beans、Core、Context、SpEL
(b)导入支持日志输出的Jar包
commons-logging-1.2.jar
log4j-1.2.16.jar
(2)创建实体类和方法
(3)创建Spring配置文件,配置创建的实体类
(a)Spring核心配置文件的名称和位置不是固定的,建议放到src下,官方建议applicationContext.xml
(b)引入Schema约束
(c)配置对象创建
<bean id="user" class="全路径名"></bean>
(4)测试对象的创建
实际项目中不需要写测试
(a)根据配置文件创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User)context.getBean("user")// 根据配置文件中Bean的ID
3. Spring的Bean管理(xml文件配置)
在Spring中可以通过配置文件创建对象
1. Bean实例化的三种方式
(1)使用类的无参构造器创建
(2)使用静态工厂创建
创建静态的方法,返回类对象
<bean id="user" class="静态工厂全路径"></bean>
(3)使用实例工厂创建
创建不是静态的方法,返回类对象
2. Bean标签常用属性
(1)id属性:Bean的名称,任意命名,不能包含特殊字符,可以根据ID值得到配置对象
(2)class属性:创建对象所在类的全路径
(3)name属性:功能与ID属性值一样,但是可以包含特殊字符(很少使用)
(4)scope属性:
(a)singleton:默认值,单例的
(b)prototype:多例的(用于配置Struts2中的多实例Action)
(c)request:创建对象放到request域中
(d)session:创建对象放到session域中
(e)globalSession:创建对象放到globalSession域中(用于单点登录)
3. 属性注入
创建对象时,向类的属性中设置值
属性注入的方式:
4. Spring注入属性(有参构造和Set方法)
(1)有参构造
<bean id="demo" class="">
<constructor-arg name="username" value=""></construstor-arg>
</bean>
(2)Set方法
<bean id="demo" class="">
<property name="username" value=""></property>
</bean>
5. Spring注入对象类型属性
创建Service类和Dao类,在Service中得到Dao对象
(1)在Service中把Dao作为类型属性
public class UserDao{
public void add(){}
}
public class UserService{
public void add(){}
}
(2)生成Dao类型属性的Set方法
public class UserService{
private UserDao userDao;
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void add(){}
}
(3)在Spring配置文件中配置
<bean id="userDao" class=""></bean>
<bean id="userService" class="">
// name属性值:service类中的属性名称,ref 属性配置bean中的ID属性
<property name="userDao" ref="userDao">
</bean>
6. P名称空间注入
(1)引入p名称空间
<beans xmlns:p....>
(2)Spring配置文件中配置
<bean id="" class="" p:username="">
7. Spring注入复杂数据
(1)数组 (2)List集合 (3)Map集合 (4)Properties类型
代码:
Spring配置文件:
<bean id="" class="">
//数组
<property name="arrs">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<property name="list">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<property name="map">
<map>
<entry key="1" value="one"></entry>
<entry key="2" value="two"></entry>
<entry key="3" value="three"></entry>
</map>
</property>
<property name="properties">
<props>
<prop key="1">one</prop>
<prop key="2">two</prop>
<prop key="3">three</prop>
</props>
</property>
</bean>
4. IoC和DI区别
(1)Ioc:控制反转,把对象创建交给Spring配置
(2)DI:依赖注入,向类里的属性设置值
(3)关系:DI不能单独存在,需要在IoC的基础上完成操作
5. Spring整合Web项目原理
1. 加载Spring核心配置文件,根据对象创建
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
new一个对象,功能可以实现,但是效率低
2. 实现思想:把加载配置文件和创建对象过程,在服务器启动时完成
3. 实现原理:
(1)ServletContext对象
(2)监听器
(3)使用:
(a) 在服务器使用时,为每个项目创建一个ServletContext对象
(b) 在ServletContext对象创建时,使用监听器可以具体到ServletContext对象什么时候创建
(c) 使用监听器监听到ServletContext对象创建的时候
(a)加载Spring配置文件,在配置文件配置对象创建
(b)把创建出来的对象放到ServletContext域对象里(setAttribute方法)
(c)获取对象的时候,到ServletContext域对象中得到(getAttribute方法)
原文 http://blog.csdn.net/imail2016/article/details/74178221