spring概述
1.轻量级的开源的JAVAEE框架
2.解决企业应用开发的复杂性
3.两大核心 :IOC(控制反转)和AOP(面向切面)
4.Spring特点:
- 1.方便解耦,简化开发。
- 2.Aop编程支持
- 3.方便程序测试
- 4.方便和其他框架进行整合
- 5.方便进行事物操作
- 6.降低API开发难度
IOC概念和原理:
什么是Ioc:
- 控制反转,把对象的创建和对象之间的调用过程,都交给Spring进行管理
- 使用IOC的目的:为了降低耦合度
IOC底层原理:
xml解析、工厂模式、反射
假设有UserService与UserDao两个对象,UserService对象要调用UserDao对象的add()方法,1>.最原始写法为直接调用:(耦合度过高)
2>.通过工厂模式:降低UserService对象与UserDao对象之间的耦合度;只能说降低耦合度到最低限度,耦合对不能完全消失
IOC过程:
1.xml配置文件,配置创建的对象
<bean id="dao" class = "com.base.UserDao"></bean>
2.创建工厂类,在工厂类中解析xml配置文件,通过反射获取对象的字节码文件,通过newInstance()方法获取创建的对象
IOC思想基于Ioc容器完成,IOC容器底层就是对象工厂
二:Spring提供IOC容器实现的两种方式:(两个接口)
(1)BeanFactory:
spring内置的方式,IOC容器基本实现方式;
特点:加载配置文件的时候不会创建对象,在获取或者使用的时候才会创建对象;
(2)ApplicationContext:
BeanFactory接口的子接口,提供了更多更强的功能,一般面向开发人员使用
特点:加载配置文件的时候就会把配置文件中的对象进行创建
ApplicationContext接口的实现类:
bean管理的两大内容:
(1)spring创建对象
(2)spring注入属性
1.实现Bean管理操作的两种方式
xml方式创建对象
<bean id="user" class="com.springText.spring5.User"></bean>
<!--使用property完成属性注入
name:类里面属性名称
value:向属性注入的值
-->
set方法注入属性值
public class Book{
private String bname;
public void setBname(String bname){
this.bname = bname;
}
public static void main(String[] args){
Book book = new Book();
book.setName("小韩");
}
}
在spring配置文件xml中配置对象创建,配置属性注入
//配置对象创建
<bean id="book" class="com.springText.spring5.Book">
//配置属性注入
<property name="bname" value="易筋经"></property>
<property name="bauthor" value="夷陵老祖"></property>
</bean>
有参构造注入属性值
1.创建类,定义属性,创建属性对应有参构造。
public class Orders{
//属性
private String oname;
private String address;
//有参构造函数
public Orders(String oname,String address){
this.oname = oname;
this.address = address;
}
public void orderTest(){
System.out.println(oname+"::"+address);
}
}
2.在Spring的配置文件中进行配置:constructor-arg
<!--有参构造注入属性-->
<bean id=" orders" class="com. springText. spring5. Orders">
<constructor-arg name ="oname" value="电脑"></constructor-arg>
<constructor-arg name = "address" value ="China"></constructor arg>
</bean>
p名称空间注入:
1.使用p名称空间注入,可以简化基于xml配置方式
第一步:在xml配置文件中添加p名称空间
(2)进行属性注入,在bean标签里进行操作p:bname
<bean id="Order" class="com.springTest.spring5.Order" p:oname ="小兔" p:address="China"></bean>
xml注入其他类型属性:注入空值和特殊符号
(1)设置null值:
<--null值-->
<property name="address">
<null/>
</property>
(2)包含一些特殊符号
<!--属性值包含特殊符号
1. 把<>进行转义 < >
2. 或者:把带特殊符号内容写到CDATA
>
<property name = "address">
<value>く![CDATA[<<南京>>]]</value>
</property>
</bean>