Spring是应用了很多优秀的设计模式,对于项目的实现提供了优秀的解决方法,Spring是一个轻量级(低侵入(MVC和逻辑代码框架). 类与类的解耦合
目的:解决企业应用开发的复杂性
功能:使用了基本的JavaBean代替了EJB,并提供了更多的企业应用功能
范围:任何Java应用
IOC:控制反转(DI:依赖注入)
不在使用传统的创建对象的方法,而是将创建对象的控制权交由spring容器(配置文件)中来声明和实现。
IOC的事项原理:工厂设计模式-----反射(无参构造方法) 配置文件+工厂类
1.读取bean的XML配置文件
2.使用beanId查找bean配置,并获取配置文件中class地址。
3.使用Java反射技术实例化对象
4.获取属性配置,使用反射技术进行赋值。
IOC的好处:解耦合
开发Spring至少需要使用的jar包(5+1)
Spring-aop.jar 开发aop特效时需要的jar
Spring-beans.jar 处理Bean的jar
Spring-context.jar 处理spring上下文的jar
Sping-core.jar 核心jar
Spring-expression.jar spring表达式
Commons-logging.jar 第三方提供的日志jar
Spring主配置文件中:bean标签表示一个对象
id是一个对象的唯一表示
class是类的全路径
1.设值注入
<bean id="product" class="com.gxy.entity.Product">
<property name="proId" value="1"></property>
<property name="proName" value="华为"></property>
<property name="proBrief" value="国产手机"></property>
<property name="proPrice" value="6999.99"></property>
<!-- <property name="phone" ref="phone"></property> -->
</bean>
ref 引用其它对象
<bean id="product" class="com.gxy.entity.Product" >
<property name="proId" value="1"></property>
<property name="proName" value="华为"></property>
<property name="proBrief" value="国产手机"></property>
<property name="proPrice" value="6999.99"></property>
<property name="phone" ref="phone"></property>
</bean>
<bean id="phone" class="com.gxy.entity.Phone">
<property name="phoName" value="realme"></property>
</bean>
2.构造注入
<bean id="product2" class="com.gxy.entity.Product">
<constructor-arg>
<value>2</value>
</constructor-arg>
<constructor-arg>
<value>小米</value>
</constructor-arg>
<constructor-arg>
<value>手机</value>
</constructor-arg>
<constructor-arg>
<value>2999.99</value>
</constructor-arg>
</bean>
3.自动装配
限制:不能自动装配所谓的简单类型包括基本类型,字符串和集合类
通常用来自动装配 对象
a.标注autowire=”byName”,表示通过名称来自动装配
扫描当前类下,所有 对象 的 属性值,然后通过这个属性值来spring容器(配置文件)中找有没有对应的bean-id
如果找到,则自动装配该对象;如果找不到,则报错
<bean id="product" class="com.gxy.entity.Product" autowire="byName">
<property name="proId" value="1"></property>
<property name="proName" value="华为"></property>
<property name="proBrief" value="国产手机"></property>
<property name="proPrice" value="6999.99"></property>
</bean>
<bean id="phone" class="com.gxy.entity.Phone">
<property name="phoName" value="realme"></property>
</bean>
b.标注autowire=”byType”,表示通过类型来自动装配
扫描当前类下,所有的 对象 的 类型,然后通过类型来spring容器(配置文件)中找有没有对应的类型
如果找到,则自动装配该对象;否则,则报错
<bean id="product" class="com.gxy.entity.Product" autowire="byName">
<property name="proId" value="1"></property>
<property name="proName" value="华为"></property>
<property name="proBrief" value="国产手机"></property>
<property name="proPrice" value="6999.99"></property>
</bean>
<bean class="com.gxy.entity.Phone">
<property name="phoName" value="realme"></property>
</bean>
Spring DI 依赖注入方式对比
依赖注入没有优劣之分,只有根据场景是否最适用的区别
Spring个人比喻(若不恰当请见谅)
我觉得Spring相当于家政公司,如果家里非常凌乱自己打扫整理非常需要耗费时间,效率也有限。IOC就像把家里的整理权交给了家政公司,DI就是整理方式,无论是使用人工还是机器,在不损坏雇主的物品是都可以使用,相当于通过第三方来达成目标。