Spring是什么
概念:Spring是分层的Java EE/SE应用full-stack轻量级开源框架,以IOC和AOP为内核
优势:1)方便解耦,简化开发;2)AOP编程支持;3)声明式事务支持;4)方便程序测试;5)方便集成各种优秀框架;6)降低JavaEE API的使用难度;7)Java源码是经典学习范例
##Spring开发步骤
1、导入Spring开发的基本包坐标—>Spring Context
2、编写DAO层
3、创建Spring核心配置文件–applicationContext.xml
4、在Spring配置文件中配置UserDaoImpl
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl"></bean>
5、使用Spring的API获得Bean实例
public class UserDaoDemo {
public static void main(String[] args) {
ApplicationContext appli = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) appli.getBean("userDao");
userDao.save();
}
}
##Spring配置文件
Bean标签的基本配置
属性
id:Bean实例在Spring容器中的唯一标识
calss:Bean在全路径名称
Bean的标签范围:
| 取值范围 |说明
|singleton |单例,默认
|prototype |多例
|request |web项目中,设置Bean参数到request域
|session |web项目中,设置Bean到session域中
|global session |web项目中,应用在Portlet环境,没有的情况下与session相同
1)当scope的取值范围为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载时,创建容器时,对象创建
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象销毁
2)当scope的取值范围为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化配置的Bean实例
Bean的生命周期:
对象创建:当使用对象时,对象创建
对象运行:只要对象在使用,对象一直活着
对象销毁:当对象长时间不适用,被Java的垃圾回收器回收
Bean生命周期配置
init-method=“save”:指定类中的初始化方法
destroy-method="":指定类中的销毁方法
Bean实例化三种方式
无参构造方法实例化–常用
工行静态方法实例化
<bean id="userDao" class="com.it.factoy.StaticFactory" factory-method="getUserDao"></bean>
工厂实例方法实例化
<bean id="dynamicFactory" class="com.it.factoy.DynamicFactory" ></bean>
<bean id="userDao" factory-bean="dynamicFactory" factory-method="getUserDao"></bean>
Spring的依赖注入
概念(dependency Injection):他是Spring框架核心IOC的具体实现
将Dao注入给Service
1)构造方法
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl" ></bean>
<bean id="userService" class="com.it.service.impl.UserServiceImpl">
<!--name-->
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
2)set方法
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl" ></bean>
<bean id="userService" class="com.it.service.impl.UserServiceImpl" p:userDao-ref="userDao">
</bean>
p:命名空间引入
xmlns:p="http://www.springframework.org/schema/p"
<bean id="userService" class="com.it.service.impl.UserServiceImpl" p:userDao-ref="userDao">
</bean>
注入数据的三种数据类型:
- 普通数据类型
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl" >
<property name="username" value="zhangsan"/>
<property name="age" value="18"/>
</bean>
- 引用数据类型
- 集合数据类型
<bean id="userDao" class="com.it.dao.impl.UserDaoImpl" >
<!--List集合-->
<property name="list" >
<list>
<value>zhangsan</value>
<value>lisi</value>
<value>wangwu</value>
<value>zhaoliu</value>
</list>
</property>
<!--map属性-->
<property name="userMap">
<map>
<entry key="user" value-ref="user1">
</entry>
</map>
</property>
<!--Properties属性-->
<property name="properties">
<props>
<prop key="p1">pp1
</prop>
<prop key="p2">pp2
</prop>
</props>
</property>
</bean>
<bean id="user1" class="com.it.domain.User">
<property name="name" value="张三"></property>
<property name="addr" value="西安市"></property>
</bean>
<bean id="userService" class="com.it.service.impl.UserServiceImpl">
<!--name-->
<constructor-arg name="userDao" ref="userDao"></constructor-arg>
</bean>
分模块开发之配置文件引入
<import resource="applicationContext-product.xml"></import>
<import resource="applicationContext-user.xml"></import>
Spring的重点配置
<bean>标签:
*id:Bean实力在Spring容器中的唯一标识
*class:Bean的全限定名称
*scope:对象的作用范围,默认singleton,多例prototype
<property>标签:属性注入
name属性:属性名称
value属性:注入普通属性值
ref属性:注入的对象引用值
<list>标签
<map>标签
<properties>标签
<constructor-arg>标签
<import>标签:导入其他的spring文件
Spring相关的API
**applicationContext:接口类型,代表应用的上下文,可以通过其他实例获得Spring容器中的Bean对象
**ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件推荐使用这种
**FileSystemXmlApplicationContext
它是从磁盘路径上加载配置我呢见,配置文件可以在磁盘的任意位置
**AnnotationConfigApplicationContext
当使用注解配置容器对象时,需要使用此类来创建Spring容器,用来读取注解
**getBean()方法;
传Id,允许存在多个的情况使用
UserService userService = (UserService)app.getBean(“userService”);
传字节码文件,只存在一种的情况
UserService userService = app.getBean(UserService.class);
知识要点
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
app.getBean("id");
app.getBean(Class);