SSM
目录1
Spring
1.1
Spring Framework
- 基础 最底层架构
1.2
IoC DI
- IOC容器对象创建初始化
- 被管理的对象叫Bean
- 把dao,service和建立bean之间的依赖都放在一个springconfig配置文件中进行
- 使用
@Controller
注解时,Spring会自动扫描并管理带有该注解的类,无需显式配置;在配置文件中配置 bean 需要手动指定要管理的类,并在配置文件中进行详细配置,灵活性更高,但需要更多的手动工作。
IoC
- 导入maven依赖
- 定义Spring管理的类
- 创建SpringConfig配置文件,配置对应的类
- 初始化IoC容器并从容器中获取Bean
DI
-
提供对应的set方法
-
在创建
bookService
bean时,它会检测到setBookDao
方法,并将在配置文件中配置的bookDao
bean的引用传递给这个方法,从而完成依赖注入。 -
试了下,在init前就调用了set方法
-
-
在xml配置文件中配置server与dao的关系
理解
- 感觉这个像把耦合部分放到配置文件中了,如果dao修改,则不需要再修改service中的代码,而是修改配置文件,这样比较方便?
基础配置
- @Scope注解:控制单例/多例对象;在配置文件标签中加prototype也可
- 默认为单例,一般只有封装实体的域对象需要用多例
bean
构造方法(常用)
- Spring创建bean的时候调用的是无参的构造方法
静态工厂(了解)
- 静态工厂知识补充:http://t.csdnimg.cn/EUKXU
- 标签中配工厂类名加factory-method
- 缺点:<bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/>仅仅为了下一个bean使用,很多余且麻烦
实例工厂(重要)
- 实例工厂的方法是非静态的,创一个实例工厂的对象,然后调用里面的dao方法
- 创一个UserDaoFactoryBean类实现FactoryBean
- 控制单例/非单例:在UserDaoFactoryBean类增加一个isSingleton
<!--方式一:构造方法实例化bean-->
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
<!--方式二:使用静态工厂实例化bean-->
<bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>
<!--方式三:使用实例工厂实例化bean-->
<bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/>
<bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>
<!--方式四:使用FactoryBean实例化bean-->
<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>
Bean生命周期
- 关闭容器
- ctx.close() 暴力关容器
- ctx.registerShutdownHook(); 注册关闭钩子函数,在虚拟机退出之前回调此函数,关闭容器
- 生命周期控制
- 法一:自定义init和destroy,然后配置
- 法二:接口控制
生命周期
-
初始化容器
- 创建对象(内存分配)
- 执行构造方法
- 执行属性注入( set操作)
- 执行bean初始化方法
-
使用bean
- 执行业务操作
-
关闭/销毁容器
- 执行bean销毁方法
依赖注入
setter注入(重要)(常用)
引用类型
- 在bean中定义引用类型属性并提供需要注入对象的set方法
- 在配置中使用property标签name(set方法名),ref(ref指明的是哪一个bean)
简单类型
- 在配置中使用property标签name(属性名),value(值)
构造器注入
- 把set方法改成构造器
- 配置文件中用constructor-arg,name写形参名称,ref写bean名
- 解耦合
- 指定type,index
使用场景
- 强制依赖用构造器
- 可注可不注用setter
举例说明:http://t.csdnimg.cn/zcDHZ
自动装配
-
仍需提供set方法
-
autoware
-
<bean id="bookService" class="com.itheima.service.impl.BookServiceImpl" autowire="byType"/>
-
按名称装配:bean中有一个id和类中的变量名耦合(不推荐)
-
自动装配无法对简单类型进行依赖注入
集合注入
-
请看vcr
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"> <!--数组注入--> <property name="array"> <array> <value>100</value> <value>200</value> <value>300</value> </array> </property> <!--list集合注入--> <property name="list"> <list> <value>itcast</value> <value>itheima</value> <value>boxuegu</value> <value>chuanzhihui</value> </list> </property> <!--set集合注入--> <property name="set"> <set> <value>itcast</value> <value>itheima</value> <value>boxuegu</value> <value>boxuegu</value> </set> </property> <!--map集合注入--> <property name="map"> <map> <entry key="country" value="china"/> <entry key="province" value="henan"/> <entry key="city" value="kaifeng"/> </map> </property> <!--Properties注入--> <property name="properties"> <props> <prop key="country">china</prop> <prop key="province">henan</prop> <prop key="city">kaifeng</prop> </props> </property> </bean>