一. spring是什么
Spring是一个轻量级的Java 开发框架 是管理对象的容器 原本对象通过new生成 现在不需要new 通过spring来创建管理对象。
Spring 的核心是控制反转 (IoC)和面向切面(AOP),Spring 是一个分层的 JavaSE/EEfull-stack(一站式) 轻量级 开源框架。
EE 开发分成三层结构:
WEB 层:Spring MVC.
业务层:Bean 管理:(IOC)
持久层:Spring 的 JDBC 模板.ORM 模板用于整合其他的持久层框架.
二. spring优点
方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象创建和依赖关系维护,交给 Spring 管理
AOP 编程的支持
Spring 提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
Spring 对 Junit4 支持,可以通过注解方便的测试 Spring 程序
方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、 MyBatis、Quartz 等)的直接支持
降低 JavaEE API 的使用难度
Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装, 使这些 API 应用难度大大降低
三. spring概念
spring 通过bean标签来将对象交给spring容器管理
然后通过ApplicationContext加载配置文件来创建容器对象 getBean方法 来得到对象
IOC inverse of control 反转控制
创建对象的方式反转了
以前对象的创建由开发人员自己维护 包括依赖关系也是自己注入
使用了spring 对象的创建以及依赖关系可以由spring完成创建和注入
反转控制就是反转了对象的创建方式,由我们自己创建反转给了spring
作用是实现了程序的解耦合
IOC的实现原理
DI dependency Injection 依赖注入
IOC :控制反转,将对象的创建权交给了 Spring.
DI :Dependency Injection 依赖注入.需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依 赖的属性设置进去.
实现IOC需要DI的支持
注入方式:
set方法注入
构造方法注入
字段注入
注入类型:
值类型注入 (基本数据类型)
引用类型注入(将依赖对象注入)
3.spring的工厂
(1)ApplicationContext
ApplicatioContext 接口有两个实现类:
ClassPathXmlApplicationContext :加载类路径下 Spring 的配置文件. FileSystemXmlApplicationContext :加载本地磁盘下 Spring 的配置文件
(2) BeanFactory(过时)
它是spring原始接口.针对原始接口的实现类功能较为单一
BeanFactory :是在 getBean 的时候才会生成类的实例.
ApplicationContext :在加载 applicationContext.xml(容器启动)时候就会创)
四 spring配置
Bean元素:使用该元素描述需要spring容器管理的对象
class属性:被管理对象的完整类名.
name属性:给被管理的对象起个名字.获得对象时根据该名称获得对象.
可以重复.可以使用特殊字符.
id属性: 与name属性一模一样.
名称不可重复.不能使用特殊字符.
结论: 尽量使用name属性.
scope属性:
singleton(默认值):单例对象.被标识为单例的对象在spring容器中只会存在一个实例
prototype:多例原型.被标识为多例的对象,每次再获得才会创建.每次创建都是新的对象.
生命周期属性
配置一个方法作为生命周期初始化方法.spring会在对象创建之后立即调用.init-method
配置一个方法作为生命周期的销毁方法.spring容器在关闭并销毁所有容器中的对象之前调用.destory-method
空参构造方式
spring创建对象方式
1.空参构造方式
2.静态工厂(了解)
3.实例工厂(了解)
3.spring属性注入:
注入方式:
set方法注入
<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<property name="name" value=" 奇瑞 QQ"/> <property name="price" value="40000"/>
</bean>
构造函数注入
<bean id="car" class="cn.itcast.spring.demo4.Car">
<constructor-arg name="name" value=" 保时捷 "/> <constructor-arg name="price" value="1000000"/>
</bean>
对象注入
<bean id="person" class="cn.itcast.spring.demo4.Person">
<property name="name" value=" 会希 "/> <!-- ref 属性:引用另一个 bean 的 id 或 name -->
<property name="car2" ref="car2"/>
</bean>
p名称空间注入(了解)
spel注入(了解)
复杂类型注入:
CollectionBean 有Array List Map Property属性
<bean name="cb" class="cn.itcast.c_injection.CollectionBean" >
<!-- 如果数组中只准备注入一个值(对象),直接使用value|ref即可
<property name="arr" value="tom" ></property>
-->
<!-- array注入,多个元素注入 -->
<property name="arr">
<array>
<value>tom</value>
<value>jerry</value>
<ref bean="user4" />
</array>
</property>
<!-- 如果List中只准备注入一个值(对象),直接使用value|ref即可
<property name="list" value="jack" ></property>-->
<property name="list" >
<list>
<value>jack</value>
<value>rose</value>
<ref bean="user3" />
</list>
</property>
<!-- map类型注入 -->
<property name="map" >
<map>
<entry key="url" value="jdbc:mysql:///crm" ></entry><!--字符串 字符串 -->
<entry key="user" value-ref="user4" ></entry><!--对象 字符串 -->
<entry key-ref="user3" value-ref="user2" ></entry><!--对象 对象 -->
</map>
</property>
<!-- prperties 类型注入 -->
<property name="prop" >
<props>
<prop key="driverClass">com.jdbc.mysql.Driver</prop>
<prop key="userName">root</prop>
<prop key="password">1234</prop>
</props>
</property>
</bean>