夜光序言:
夜好长,
可又该如何面对明天呢?
正文:
2. Spring IOC 容器
创建bean细节:
1) bean在容器中的写法
2) bean声明周期
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<~-- 把对象加入IOC容器 -->
<~-- 细节1: id 与 name: id 不能以数字开头,不能含有特殊符号, 不能有空格、逗号等; id 不能重复~ name 可以以数字开头,可以有特殊符合,如果name值重复,编译没有问题但运行报错~
<bean id="user" name="user2,user3 user4" class="cn.Genius.a_config.User"></bean> <bean name="user5" class="cn.Genius.a_config.User"></bean> <bean id="user6" class="cn.Genius.a_config.User"></bean> <bean id="user6" class="cn.Genius.a_config.User"></bean> -->
<~-- 细节2: (单例/多例) --> <~-- scope="singleton" 默认表示单例~ prototype 多例 init-method="" 在创建完对象之后执行初始化方法 destroy-method="" 在调用容器类的destroy()方法时候,对单例的对象有效~ lazy-init="true" 延迟初始化 / 这个属性的设置只对单例有影响,对多例没有任何影响~ 单例的对象默认是在创建容器的时候就创建所有单例的对象,如果希望在第一次访问的时候创建单例的对象,就设置延迟初始化 Bean生命周期: bean在xml中配置, singleton 单例 1) 创建对象 如果有配置延迟初始化, lazy-init=true 如果单例的对象有配置延迟初始化, 在创建容器之后,在第一次从容器获取对象的时候 创建单例的对象~ 如果没有配置或延迟初始化为默认值, 单例的对象会在创建容器的时候创建对象 2) 执行初始化方法 , init-method配置的方法会执行 3) 调用容器destroy() 方法时候,容器在销毁单例对象的实例的时候,会调用destroy-method对应的方法 此时bean对象会被销毁~
prototype 多例 1) 每次在从容器获取对象的时候,都会创建新的对象 2) 每次创建完对象后,就执行初始化方法 3) java回回收不用资源(jvm gc) --> <bean id="user" class="cn.Genius.a_config.User" init-method="init" destroy-method="destroy_" lazy-init="false" scope="prototype"></bean>
</beans> |
创建对象的几种方式
创建对象的几种方式:
1) 调用无参数构造器
2) 调用有参数构造器
3) 工厂
* 静态方法
<bean id=”’ class=”” factory-method=””/>
* 非静态方法
<bean id=”factory” class=”..”>
<bean id=”” factory-bean=” factory” factory-method=”实例方法” />
4) 反射
|
处理对象的依赖关系
给对象属性赋值(DI, 依赖注入),几种方式:
1) 构造函数赋值
2) set 方法注入值
* 普通字段赋值
* 集合属性 (list/map/property)
3) 案例
Dao/service/action实例,处理依赖关系
* 常用的通过set方法注入
* 内部bean
* p 名称空间
* 自动装配
* 注解
夜光:注解总结
@Component 表示一个组件(类),把当前组件加入ioc容器
加入容器的组件的名称默认是类名第一个字母小写
@Component(“”) 指定加入ioc容器的组件类的类名
@Repository 标识是一个持久层的组件
@Service 标识是一个业务逻辑层的组件
@Controller 标识是一个控制层的组件
@Scope("prototype") 指定对象单例/多例
@Resource
1. 默认根据修饰的字段名称会取ioc容器找对象自动注入
找到后注入
2. 如果名称没有找到,再根据类型查找 找到后就立刻注入
如果改类型在ioc容器中有多个对象,报错~
3. 根据类型也没有找到对象,报错~
@Resource(name =””) 会根据指定的名称去容器找对象自动注入
配置方式与注解方式:
1. 配置, 便于维护
(配置过多,比较繁琐)
2. 注解, 开发方便
(简化配置,不利于后期维护,如果修改对象创建、关系处理,需要改代码~)
3. Spring 与Struts整合
Spring与struts整合,关键点:
把action的创建,交给spring的ioc容器~
所以,需要引入jar文件:【我们开发中需要各种各样的jar包,可以去中央仓库进行索取~~】
struts2-spring-plugin-2.3.4.1.jar 【struts源码】
spring-web-3.2.5.RELEASE.jar 【spring源码】
整合完整步骤:
1. 引入jar
Struts核心jar
Spring
Core 核心 (5个)
Web 对web支持 (2个)
2. 配置
bean.xml
struts.xml
web.xml
struts2核心过滤器
启动时候,配置加载springIOC容器
3. Action 类
夜光任务:
1. 写简单案例,练习spring 、
* 搭建spring环境
* 测试OK
* dao/service/action
然后处理对象依赖关系,
* set方法注入值, 几种方式
* 注解
2. spring与struts整合,小案例
3. 优化前面项目,
融入spring功能~,进行整合开发