一. 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方法注入
代码语言:javascript复制<bean id="car2" class="cn.itcast.spring.demo4.Car2">
<property name="name" value=" 奇瑞 QQ"/> <property name="price" value="40000"/>
</bean>
构造函数注入
代码语言:javascript复制<bean id="car" class="cn.itcast.spring.demo4.Car">
<constructor-arg name="name" value=" 保时捷 "/> <constructor-arg name="price" value="1000000"/>
</bean>
对象注入
代码语言:javascript复制<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属性
代码语言:javascript复制<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>