v Spring的简介
Spring是分层的JavaSE/EE应用full-stack(全栈)轻量级开源框架,以Ioc和AOP为内核;提供了展现层SpringMVC(web层),持久层Spring JDBCTemplate(dao层)以及业务层事务管理等众多的企业级应用技术;整合众多的第三方框架和类库(技术选型的时候很看重该技术和Spring的集成程度)
○ 轻量级:框架小巧,api简单,学习成本低;
○ full-stack:各层都有对应的解决方案,在web层 业务层 dao层都有对应的解决方案
v Spring之父:Rod Johnson
v Spring框架在Maven中开发的框架结构
w
v Spring快速入门的开发步骤
○ 在Maven中导入Spring的坐标 Spring-context
○ 编写类
○ 在Spring的核心配置文件中配置Bean对象 核心配置文件可以是任意命名,习惯命名为applicationContext.xml
○ 测试
v Spring核心配置文件的语法结构
○ Bean标签的基本配置
○ Spring实例化对象
§ 原理:Spring的核心之一是Ioc ,即控制反转,就是将创建对象的权限交给Spring来创建,以达到类之间的松耦合的目的
○ Bean实例化的三种方式
A. 使用无参构造方法实例化
语法:<Bean id ="userdao" class="cn.itcast.dao.impl.UserDaoImpl"></Bean>
id :自由命名,在类中使用Ioc容器获取对象的时候,传入id属性来指定获取的是哪个对象
class:类的全限定名称,也就是类的全路径
B. 工厂静态方法实例化
原理:创建一个工厂类,是类中创建静态方法,方法的返回值类型是要创建的对象的类,在核心配置文件中需要先实例化工厂类,通过工厂类实例化Bean;
语法:<Bean id="userdao" class="co.itcast.Factory" factory-method="getUserDao"></Bean>
C. 工厂实例方法实例化
原理:创建一个工厂类,类中的方法是非静态方法,方法返回值为要创建对象的类;先实例化工厂类,再通过工厂的对象实例化Bean
语法:<Bean id="factory" class="cn.itcast.Factory"></Bean>
<Bean id="userdao" factory-bena="factory" factory-method="getUserDao"></Bean>
○ Bean标签的范围配置 scope属性
§ 属性scope指对象的作用范围:取值有五种
singleton 默认的 单例的(配置文件被加载的同时创建对象)
Prototype 多例的 在运行getBean方法的时候创建对象
Session
Request
Golbal session
v Bean的依赖注入
○ 概念
§ 依赖注入是Spring的核心IocD 具体实现
§ 在编写程序的时候,通过控制反战,将创建对象的权限交给Spring框架,但是在代码中不可能真的没有依赖关系,
IOC只是降低了依赖的关系,不能消除,例如,业务层还是会调用持久层的方法
这种依赖关系,使用Spring之后,就让Spring来维护
○ 依赖注入的方式
§ 有参构造方法
§ 在userserviceimpl中引入私有成员变量userdao;生成有参构造方法,userdao相当于构造方法中的一个参数
§ 在配置文件中配置:
<Bean id="userdao" class="cn.itcast.dao.impl.UserDaoImpl"/><Bean id="usersercie" class="cn.itcast.service.impl.UserServiceImpl"><Constructor-arg name="userDao" ref="userdao"></Constructor></Bean>
§ set方法
§ 同样的要引入私有成员变量userdao,生成set方法,
§ 在配置文件中配置:
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.itheima.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
○ 依赖注入的数据类型
§ 依赖注入的数据类型除了上面说的引用数据类型,还有普通数据类型 和集合数据类型
§ 普通数据类型
§ 配置:
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="company" value="传智播客"></property>
<property name="age" value="15"></property>
</bean>
§ 集合数据类型:
§ list集合:
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="strList">
<list>
<value>aaa</value>
<value>bbb</value>
<value>ccc</value>
</list>
</property>
</bean>
----------------------------------------------------------------
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="userList">
<list>
<ref bean="u1"/>
<ref bean="u2"/>
</list>
</property>
</bean>
§ Map<String,User >集合
<bean id="u1" class="com.itheima.domain.User"/>
<bean id="u2" class="com.itheima.domain.User"/>
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="userMap">
<map>
<entry key="user1" value-ref="u1"/>
<entry key="user2" value-ref="u2"/>
</map>
</property>
</bean>
§ Properties集合
<bean id="userDao" class="com.itheima.dao.impl.UserDaoImpl">
<property name="properties">
<props>
<prop key="p1">aaa</prop>
<prop key="p2">bbb</prop>
<prop key="p3">ccc</prop>
</props>
</property>
</bean>
v 导入其他配置文件
§ 在实际开发过程中Spring的配置非常多,会导致配置文件体积庞大,内容繁杂,所以可以将部分配置拆解到其他的配置文件中,在Spring的核心配置文件中通过import导入
applicationContext.xml
applicationContext-user.xml
在applicationContext.xml中通过impor标签导入applicationContext-user.xml
<import source="applicationContext-user.xml"/>
v 核心配置文件application Context的继承体系
§ applicationContext 是一个接口,其实现类有:
§ ClassPathXmlApplicationContext
它是从类的根路径下加载配置文件,推荐使用这种
§ FileSystemXmlApplicationContext
它是从磁盘路径下加载配置文件,可以在磁盘的任意位置
§ AnnotationConfigApplicationContext
当使用注解配置容器对象的时候,需要使用此类来读取注解配置。
v getBean()方法使用
§ getBean()方法的参数有两种:
§ 参数为字符串:表示根据配置文件中Bean的id从容器中获取实例,返回时Object,需要强转;
§ 参数为Class类型的:表示根据类型从容器中获取实例,当容器中有多个相同的类型的时,该方法就会报错
|
|