Spring框架学习第一天

第一天 - 简单配置及DI的注入

1.spring 框架构成

  • 核心部分 IOC(控制反转) 基础部分 整个spring框架的基石
  • Spring DAO Spring 对 jdbc 的支持
  • Spring web Mvc spring 规范web mvc的开发 后期还要集成其它框架
  • Spring AOP 面向切面编程
  • Spring ORM(对象关系映射) spring 集成 MyBatis 后期还有 hibernate
  • Spring JEE 远程调用 邮件 等

Spring IOC

  • Inversion of control 控制反转
  • 控制反转的意思是 程序中的对象 由原来的 new 的方式 转换成
  • 由框架来 创建 和 注入,这样做 可以降低对象之间的耦合度。

什么Spring 容器

  • 任何java类 都可以看成一个 bean 组件,然后通过容器 管理和使用组件。
  • Spring 容器 实现了 IOC 和 AOP 机制
  • Spring 容器 有两种实现 ApplicationContext 和 BeanFactory
    推荐使用 ApplicationContext

使用Spring 容器的使用步骤

  1. 建立一个项目 导入Spring IOC的jar包
  2. 导入Spring 容器 对应的配置文件 ****.xml 到 src下
  3. 在配置文件中 编写组件说明
  4. 构建Spring 容器 获取对应的组件

自定义一个类Emp类

成员变量有 id name salary
然后提供无参构造 并给 id name salary 等赋初始值 再提供toString方法
最后通过 配置文件 配置这个Emp 类型的组件 并通过Spring容器获取对象 输出对象内容

  1. 建立一个项目 导入Spring IOC的jar包
  2. 导入Spring 容器 对应的配置文件****.xmlsrc
  3. 在配置文件中 编写组件说明:<bean id="合法标识符" class="包名+类名"></bean>
  4. 构建Spring 容器 获取对应的组件
ApplicationContext app = new ClassPathXmlApplicationContext("文件路径");
类名 标识符 = app.getBean("id对应的值",类型.class);

Spring 容器创建对象的三种方式

  1. 构造器方式(默认调用无参的构造):<bean id="合法标识符" class="包名+类名"></bean>
  2. 静态工厂方法:<bean id="合法标识符" class="包名+类名" factory-method="静态方法名"></bean>
  3. 实例化工厂的方式:<bean id="合法标识符" class="包名+类名" factory-bean="对象id" factory-method="实例化方法名"></bean>

Bean 对象的作用域

只要在bean标签加scope属性

  • 默认scope是singleton(代表对象是单例的)
  • 也可以指定成prototype(代表对象是非单例的)
    其它的作用域在web部分中使用如request,session等

对象的初始化

  • 在beans标签中加default-init-method="初始化方法名",由于这个标签中影响的范围比较大所以如果一个类型中没有定义这个方法也不会报错。
  • 在bean标签中加init-method="初始化方法名",由于这个标签影响的范围小所以类型中没有定义这个方法则报错。
    需要注意的是:在beans可以配置default-init-method方法,bean标签却不能,bean标签职能配置init-method
    直接在bean标签添加init-method方法会出现找不到定义的init方法,我们需要在Emp类中添加对应的init方法即可
    init方法可以設置對象初始化屬性,若不設置則為對應屬性的默認值

对象销毁之前调用的方法

  • 在beans标签中加default-destroy-method="初始化方法名",由于这个标签中影响的范围比较大,所以如果一个类型中没有定义这个方法 也不会报错。
  • 在bean标签中加destroy-method="初始化方法名",由于这个标签影响的范围小,所以类型中没有定义这个方法则报错。
    正常情況下,生成的bean对象只会在spring容器关闭时释放,所以我们设置的myDestroy打印语句看不到,要想看到确实被调用,我们可以使用AbstractApplicationContext的对象方法.close();

bean对象的延迟实例化

延遲實例化只能在單例模式中使用,非单例模式不能使用哦~
bean对象默认在容器启动时就创建对象,可以通过lazy-init="true"将对象的创建推迟到第一次请求对象时创建
默认lazy-initdefault就是false
default-lazy-init这个在beans标签中使用

延迟创建的实例化对象会在调用时实例化

什麽是DI

DI就是Dependence Injection,依赖注入
解決的問題是,組件之間的裝配關係問題,DI是对IOC一种具体的实现

DI的实现方式

基于set方法的注入
<bean id="player" class="com.bean.Player">
    <property name="name" value="小馬哥"></property>
    <property name="age" value="18"></property>
</bean>
构造器注入

看的是构造方法的参数

自动注入

在Bean对象注入时,可以通过自动装配讲话XML注入配置。
元素中使用autowire属性指定自动装配规则,这个属性的默认值是no
其他的取值有

  • byName(以属性的名字和容器中组件的id對應關係)
  • byType(按照类型去查找,如果同类型的对象有多个,则报错)
  • constructor(参数的个数要严格匹配,可以使用占参数位置,但是不能使用占位置。

优先使用byName注入,后使用byType,如果类型有冲突则报错)
autodetect早期版本中存在,后面版本已不能使用!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值