spring 框架的开篇(一)

Spring 框架作用和优点

:主要负责技术整合,该框架提供IOC和AOP机制,基于这些特性整合,可以降低系统组件(Action,DAO)之间的耦合度,便于系统组件的维护、扩展和替换。

Spring 框架的容器

:核心是提供了一个容器,该容器类型是BeanFactory 或 ApplicationContext
容器功能:
1) 可以创建和销毁组件对象
2) 容器可以采用不同模式创建对象
3) 具有IOC机制
4) 具有AOP机制

spring容器的基本应用

1)如何将一个Bean组件交给Spring容器
在applicationContext.xml 中添加内容:
截图如下:
在这里插入图片描述

2)如何获取spring容器对象
ApplicationContext ac = new ClassPathXmlApplicationContext("./applicationContext.xml");
利用ac.getBean(“id”);方法获取容器中的Bean对象
在这里插入图片描述
3)如何控制对象创建的模式
支持singleton和prototype两种模式
默认是singleton模式
在这里插入图片描述
修改模式:
在这里插入图片描述
在这里插入图片描述
4)Bean对象的创建和销毁
singleton模式的Bean组件是在容器实例化时创建
prototype模式的Bean组件是在调用getBean()方法时创建

singleton模式可以利用Bean组件的lazy-init属性推迟创建时间(getBean调用时创建),它是一个Boolean类型
在这里插入图片描述

在中,default-lazy-init = "true"的使用 负责控制所有的单例组件推迟对象创建时间
5)Bean对象的初始化和销毁
利用的init-method属性指定初始化方法;利用destroy-method属性指定销毁方法
指定的初始化方法是在构造方法调用后自动执行
指定的销毁方法是在容器close时触发,而且只适用于singleton模式的组件
在这里插入图片描述

Spring 框架IOC特性

1)IOC概念
(Inverse of Controller)控制反转
控制转移
所谓的控制:是负责对象关系的指定、创建、初始化和销毁等等逻辑
IOC指的是将控制逻辑交给第三方框架或容器负责,当两个组件关系发生改变时,只需要修改框架或容器配置即可

2)DI概念
Dependency Injection 依赖注入
Spring框架采用DI技术实现了IOC控制思想
spring提供了两种注入方法:
setter方式注入:将组件对象传入
构造方法注入
采用构造方式注入一个CostDAO
在组件中,使用
5. Spring各种类型数据的注入
1) 对象注入
2) 基本数据类型注入
3)集合数据的注入
List, Set, Map, Properties
6. AOP概念
Aspect Oriented Programming
面向方面编程
OOP是面向对象编程,AOP是以OOP为基础
1)AOP相关概念
方面(Aspect)
指封装了共同处理的功能组件。该组件可以作用到某一批目标组件的方法上

切入点(Pointcut)
用于指定目标组件的表达式

连接点(JoinPoint)
切入点是连接点的集合。指的是方面组件和具体哪一个目标组件的方法有关系

通知(Advice)
用于指定方面组件和目标组件方法之间的作用时机

目标(Target)
利用切入点指定的组件和方法

动态代理(AutoProxy)
spring采用了动态代理技术实现了AOP机制
当使用AOP之后,从容器getBean()获取的目标组件,返回的是一个动态生成的代理类
Spring提供了两种动态代理技术:
采用CGLIB技术 :目标组件没有接口
public class 代理类 extends 原目标类型 {}
采用JDK Proxy API: 目标组件有接口
public class 代理类 implements 原目标接口 {}

  1. 通知类型
    通知决定方面组件和目标组件的作用关系
    前置通知
    方面组件在目标方法之前执行
    后置通知
    方面组件在目标方法之后执行,目标方法没有抛出异常才执行方面组件
    最终通知
    方面组件在目标方法之后执行,目标方法有没有异常都会执行方面组件
    异常通知
    方面组件在目标方法抛出异常后执行
    环绕通知
    方面组件在目标方法之前和之后执行

关于切入点的多种表达式写法:
1)方法限定表达式
指定哪些方法启用方面组件
execution(修饰符? 返回类型 方法名(参数列表) throws 异常?)
2) 类型限定表达式
指定哪些类型的组件所有方法启用方面组件
within(类型)
3)Bean名称限定
按元素的id值进行匹配
bean(id值)
4)args参数限定表达式
按方法参数类型限定匹配
args()

1)利用AOP实现异常处理,将异常信息写入文件
方面:将异常写入文件
切入点:作用到所有Action业务方法上
通知:异常通知

2)Log4j日志记录工具
主要用于日志信息的输出
可以将信息分级别按不同方式和格式输出
它主要有三部分组件构成:
日志器
负责控制消息输出,提供了各种不同级别的输出方法
输出器
负责控制消息输出的方式
布局器
负责控制消息的输出格式
2)Log4j使用方法
引入log4j.jar
在src下添加log4j.properties
3. Spring 注解配置
注解技术从jdk5.0推出,之后很多框架开始提供注解 配置形式
注解只能用在类定义前、方法定义前、成员变量定义前

Spring框架从2.5版本开始支持注解配置
它的优点:简单、快捷
1)组件扫描功能
spring可以按指定的包路径扫描内部的组件,当发现组件类定义前有以下注解标记,会将该组件纳入spring容器中
@Component //将该组件扫描到spring容器 其他组件
@Controller Action组件
@Service Service组件
@Repository DAO组件
组件扫描使用方法:
在applicationContext.xml中开启组件扫描配置
<context:component-scan base-package=“包路径”/>
在需要扫描的组件的类定义前使用注解即可
id属性默认是类名首字母小写
自定义id值
@Repository(“自定义id值”)
默认采用singleton单例模式创建Bean对象,如果需要采用原型模式prototype,可以使用@Scope(“prototype”)定义

2)如果容器中两个Bean对象之间具有注入关系,可以采用@Resource标记
默认按类型匹配注入
需要指定名称:则使用@Resource(name = “需要注入的Bean组件id值”)
@Autowired 默认按类型匹配注入,当需要指定名称注入:
@Autowired
@Qualifier(“HibernateCostDAO”)

3)AOP注解
在applicationContext.xml中启用AOP注解
aop:aspectj-autoproxy/
在方面组件中,使用注解标记
@Component 将该组件扫描到spring容器
使用@Aspect 将该组件定义为方面组件
定义空方法,在方法前使用@Pointcu定义切入点表达式
在方面组件的处理方法前使用@Around,@Before,@AfterReturning,@AfterThrowing,@After

@Aspect //将该组件定义为方面组件
//定义切入点
@Pointcut(“within(com.yk.action…*)”)
//主要目的是使用@Pointcut
public void mypoint() {}

//采用环绕通知
//@Around(“within(com.yk.action…*)”)
@Around(“mypoint()”)

1.spring 对数据访问技术的支持
例如: JDBC 、Hibernate
1)spring 提供了统一的异常处理类型(DataAccessException)
2)spring 提供了编写DAO的支持类
DaoSupport类:JdbcDaoSupport, HibernateDaoSupport
Template类: JdbcTemplate, HibernateTemplate
3)Spring 提供了声明式事务管理方法(基于AOP配置实现)

  1. srping框架使用jdbc技术
    1)新建一个工程,引入spring开发包和配置文件 IOC和AOP开发包
    2)引入jdbc技术相关的开发包(驱动包)
    3)根据要操作的表,编写对应的实体类
    4)编写DAO接口和实现类
    实现类继承DaoSupport, 使用其提供的Template对象实现增删改操作
    update():实现增删改查
    query():实现查询多行记录
    queryForObject():实现查询单行记录
    queryForInt(): 实现查询单个int值
    5)将DAO组件交给spring容器,进行相关配置
    定义DAO组件的元素
    需要给DAO的Bean注入一个dataSource对象
    dataSource对象采用一个连接池构建(dbcp连接池)
    引入dbcp连接池开发包,定义dataSource对象的bean元素

连接池优点:
增强数据库访问的稳定性
连接池可以将连接数控制在一定范围
连接池中的连接对象始终与数据库保持连通状态
避免了重复的新建连接和释放连接
动态代理的确很好用,解决了代理类重复的问题,不管是传统的静态代理或者是动态代理,实际上都有一个设计缺陷
动态代理:代理模式有一个硬性要求,类必须有接口,没有接口的类不能使用代理模式

利用CGLIB 实现动态代理设计模式 开源社区sourceforce.net sf.net
cglib-nodep-3.1.jar
Proxy: net.sf.cglib.proxy.Enhancer;
InvocationHandler: net.sf.cglib.proxy.MethodInterceptor;
真实主题调用: net.sf.cglib.proxy.MethodProxy

开发第一个网络程序 BBS.MLDN.CN
如果需要进行网络程序的开发,核心类:
服务器类:ServerSocket
客户端类:Socket

3.Spring 框架如何使用Hibernate技术
使用session对象
Session session = getSession();
2)利用hibernateTemplate.execute()方法,以回调函数方式使用

1.Spring框架和struts2整合应用

2.采用ssh结构构建费用管理模块

3.spring事务管理
spring提供以下两种方式管理事务
1)声明式事务管理(基于配置方式实现事务控制)
2)编程式事务管理(基于java编程实现事务控制)

目标:
1.掌握Spring 框架容器的使用
2.掌握Spring 框架IOC特性的使用
3.掌握Spring 框架AOP特性的使用
4.掌握Spring 如何整合JDBC, Hibernate
5.掌握Spring 如何整合Struts2
6.掌握Spring 如何进行事务管理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值