编辑: 思念那么浓 2012-12-25
第3章Spring 快速上手 本章主要回顾 Spring 的基础知识 IOC 和AOP、IOC 和AOP 背后的实现原理和设计模式.

这些设计模式包括单例模式、简单工厂模式、工厂方法模式和动态代理模式等. 3.1 Spring IOC 和DI 3.1.1 Spring IOC 和DI 概述 学习 Spring,经常会联系到 Spring 的IOC(控制反转)和DI(依赖注入).在Spring 环境 下这两个概念是等同的,控制反转是通过依赖注入来实现的. IOC 是指原先我们代码里面需要实现的对象创建、维护对象间的依赖关系,反转给容器来 帮忙实现.那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对 象与对象的关系.依赖注入的目的是为了解耦,体现一种 组合 的理念.继承一个父类,子 类将与父类耦合,组合关系使耦合度大大降低. Spring IOC 容器负责创建 Bean,并通过容器将 Bean 注入到需要的 Bean 对象上.同时 Spring IOC 容器还负责维护 Bean 对象与 Bean 对象之间的关系.那么, Spring IOC 如何来体现对 象与对象之间的关系呢?Spring 提供了 XML 配置和 Java 配置等方式,具体看下面的实例: 第3章Spring 快速上手 |

41 @Service public class AyUserServiceImpl implements AyUserService{ @Resource private AyUserDao ayUserDao;

public List findAll() { return ayUserDao.findAll();

} } Spring 提供的注解有很多,比如声明 Bean 的注解和注入 Bean 的注解,这些注解在工作中 经常被使用,所以有必要在这里重新回顾一下. 声明 Bean 的注解: @Component 没有明确的角色. @Service 在服务层(业务逻辑层)被使用. @Repository 在数据访问层(dao层)被使用. @Controller 在表现层(控制层)被使用. 注入 Bean 的注解: @Autowired Spring提供的注解. @Resource JSR-250提供的注解. 注意,@Resource 这个注解属于 J2EE 的,默认安照名称进行装配,名称可以通过 name 属 性进行指定.如果没有指定 name 属性,当注解写在字段上时,默认取字段名进行查找.如果 注解写在 setter 方法上默认取属性名进行装配.当找不到与名称匹配的 bean 时才按照类型进行 装配.但是需要注意的是,如果 name 属性一旦指定,就只会按照名称进行装配.具体代码 如下: @Resource(name = ayUserDao ) private AyUserDao ayUserDao;

而@Autowired 这个注解是属于 Spring 的,默认按类型装配.默认情况下要求依赖对象必须存 在,如果要允许 null 值,可以设置它的 required 属性为 false,如:@Autowired(required=false),如 果我们想使用名称装配,可以结合@Qualifier 注解进行使用.具体代码如下: @Autowired @Qualifier( ayUserDao ) private AyUserDao ayUserDao;

42 | Spring MVC + MyBatis 快速开发与项目实战 3.1.2 单例模式 Spring 依赖注入 Bean 实例默认都是单例的,所以有必要来回顾一下单例模式. 对于一个软件系统的某些类而言,无须创建多个实例, 例如 Windows 任务管理器, 如图 3-1 所示. 图3-1 Window 任务管理器 我们没办法打开多个任务管理器,也就是说,在一个 Windows 系统中,任务管理器存在唯 一性.为什么要这样设计呢?可以从以下两个方面来分析:其一,如果能弹出多个窗口,且这 些窗口的内容完全一致,全部是重复对象,势必会浪费系统资源,任务管理器需要获取系统运 行时的诸多信息,这些信息的获取需要消耗一定的系统资源,包括 CPU 资源及内存资源等,浪 费是可耻的,而且根本没有必要显示多个内容完全相同的窗口;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题