1.首先我们需要对spring框架有一个大概的理解:
spring是一个开源的 框架;
spring为简化企业级应用开发而生。使用spring可以使简单的javaBean实现以前只有EJB才能实现的功能。
spring是一个IOC和AOP容器框架
2.Spring的特点:轻量级,依赖注入,面向切面编程,容器,一站式平台。
3.搭建spring开发环境:
首先,新建一个maven工程,在pom文件中注册需要的jar包(肯定包括spring需要的jar包)
然后,在src/main/resource下创建一个config文件夹,在文件夹config下面新建上下文配置文件applicationContext.xml。其中文件头有固定的格式,可以直接复制粘贴。
最后,如果有实体bean需要被管理,那么就需要把实体bean注册到ioc容器中,在applicationContext.xml中的注册格式为:格式为<bean id="apple" class="包名+类名"></bean>属性中,name可以重复id在ioc容器中必须是唯一的。若 id 没有指定,Spring 自动将权限定性类名作为 Bean 的名字。id 可以指定多个名字,名字之间可用逗号、分号、或空格分隔。
4.spring ioc容器管理Bean的生命周期(spring在Bean生命周期的特定点执行特定的任务)
Spring ioc容器对Bean的生命周期进行管理的过程:
首先,通过构造器或者工厂的方法创建出Bean实例;
其次,为bean的属性设置和对其他bean的引用;
然后,调用Bean的初始化方法;
最后,当容器关闭时,调用Bean的销毁方法。
(在Bean的声明中定义Bean的init-method和destroy-method方法)
<bean id="apple" class="com.lh.spring.ioc.beanTest.Apple" init-method="eaten" scope="singleton" destroy-method="destroy"></bean>
5.在<bean>标签中通过scope属性定义bean的定义域:
singleton : spring ioc容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init="true"来延迟初始化bean,这时候只有第一次获取bean才会初始化bean。
Prototype:每次从容器中获取bean都是新的对象.
Request和Session:每次HTTP请求都会创建一个新的Bean,该作用域只适用于WebApplicationContext环境。
6两种构造方式:
属性注入:通过set方法来进行注入,在xml文件中定义<property>元素的name和value,或者ref.
构造器注入:通过构造方法来进行注入。(按类型匹配入参,按索引匹配入参)
注入的时候,如果字面值中有特殊字母可以用<![CDATA[]]>进行包裹
7.在属性或者构造器里声明的bean被称为内部bean.
<property name="se">
<bean>
<property name="">
<value></value>
</property>
</bean>
</property>
8.使用P标签示例:
<bean id="teach" class="com.lh.spring.ioc.Bean.Teach" init-method="init" p:courses-ref="scoreList" p:size="#{apple.size^3}" p:color="#{apple.color}">
9.集合bean的定义方法示例:
<!-- <property name="courses" ref="scoreList">
<list>
<value>课程1</value><value>课程2</value><value>课程3</value><value>课程4</value>
</list>
</property> -->
<property name="teachers">
<set>
<value>qingang</value><value>zhaiwanng</value><value>liuhao</value>
</set>
</property>
<property name="students">
<map>
<entry key="1" value="刘豪"/>
<entry key="2" value="翟王"/>
</map>
</property>
</bean>
<util:list id="scoreList" >
<value>1</value> <value>2</value> <value>3</value> <value>4</value>
</util:list>
10.SPEL表达式示例:
<bean id="numTest" class="com.lh.spring.ioc.Bean.NumTest">
<property name="testEqual" value="#{1==1}"/>
<property name="testNotEqual" value="#{1!=0}"/>
<property name="testLessthan" value="#{1 lt 2}"/>
<property name="testLessthanOrEqual" value="#{3 le 4}"/>
<property name="testAnd" value="#{1==2 and 2==2}"/>
<property name="testOr" value="#{1==2 and 2==2}"/>
<property name="testNot" value=" #{ !true}"/>
<property name="testAdd" value="#{1+1}"/>
<property name="testAddString" value="#{'1'+'1'}"/>
<property name="Substract" value="#{1-1}"/>
<property name="testExponentialPower" value="#{2^2}"/>
</bean>
</beans>
11.spring能够从classpath下自动扫描,侦测和示例化具有特定注解的组件
特定组件包括:
@Component:基本注解,标示一个手spring管理的组件
@Respository:标示持久层组件
@Service:标示服务层组件
@Controller:标示表现层组件
(对于扫描到的组件,spring有默认的命名策略:使用非限定类名,第一个字母小写,也可以在注解中通过value属性值标示组件的名称)
12.自动装配:略。。。。。。