Spring核心概念,IoC和AOP使用扩展

Spring核心概念

IoC的定义和原理
1.什么是控制反转
将组建对象的控制权从代码本身转移到外部容器
组建化的思想:分离关注点,使用接口,不再关注实现
依赖的注入:将组件的构建和使用分开
目的:解耦合。实现每个组件时
只关注组件内部的事情
要点:明确定义组件间的接口
使用IOC有哪些好处
解耦合
更利于程序的扩展
工厂模式:根据我们提供的我们所需的对象实例的描述,为我们返回所需要的产品
1.产品的规范
2.产品
3.工厂
4.客户端/调用者

使用Spring IoC进行设值注入(一)

使用Spring IoC的步骤是什么?
1.引入它所依赖的jar包(五六个jar包)
2.编写HelloSpring类(这个类就是Spring IoC要管理的类)
3.编写配置文件(采用bean元素声明HelloSpring的对象实例)
4.通过property元素指定被赋值的属性名
5.用value元素指定具体的赋值的内容
经验:
设值注入
使用元素定义一个组件
Id属性:指定一个用来访问的唯一名称
Name属性:指定多个别名,名字之间使用逗号、分号或空格进行分隔

实现动态组装的打印机

依赖注入综合示例
问题:
如何开发一个打印机?
可灵活配置使用彩色墨盒或灰色墨盒
可灵活配置打印页面的大小
分析:
打印机功能的实现依赖于墨盒和纸张
步骤:
定义墨盒和纸张的接口标准
使用接口标准开发打印机
组装打印机
运行打印机

AOP的定义和原理

面向切面编程(AOP)
在这里插入图片描述
横切逻辑,也叫横切关注点
AOP的目标:让我们可以”专心做事”
AOP原理
将复杂的需求分解出不同方面,将公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能
所谓面向切面编程,是一种通过预编译方式和运行期/代理实现在不修改源代码的情况下给程序动态添加功能的技术
在这里插入图片描述
在这里插入图片描述
AOP相关术语
增强处理(Advice)
前置增强
后置增强
环绕增强、异常抛出增强、最终增强等类型
切入点(Pointcut)
连接点(Join Point)
切面(Aspect)
目标对象(Target object)
AOP代理(AOP proxy)
织入(Weaving)
在这里插入图片描述
AOP实现自动的系统日志功能
在这里插入图片描述

实现步骤
1.在项目中添加Spring AOP的jar文件
2.编写前置增强和后置增强实现日志功能
3.编写Spring配置文件,对业务方法进行增强处理
4.编写代码获取带有增强处理的业务对象

怎样使用AOP
在这里插入图片描述
在这里插入图片描述
织入增强处理
织入:在切入点插入增强处理
在这里插入图片描述

IoC和AOP使用扩展

控制反转 ioc 是框架的重要特征,并非面向对象编程的专用术语。它与依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)并没有关系。
IoC最大的好处是什么?

因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拔(有点像USB接口和SCSI硬盘了)。 Spring的控制反转就是将实例化对象的权力由类交给Spring框架来执行
Dependency Injury 依赖注入。 通过IOC创建对象的时候,可以注入字符串甚至其他对象。 比如DAO就会注入session factory. 通常IOC和DI是紧密结合,一起使用的 Spring 依赖注入例子

通常IOC和DI是紧密结合,一起使用的
Spring 依赖注入例子

<bean id=“User” Class=“test1.User”>
  <property name=“id” value=“2”/>
</bean>

依赖注入的方式
1.普通的数据类型注入标签

<bean id=“User” Class=“test1.User”>
  <property name=“id” value=“2”/>
</bean>
  1. p空间属性注入
在这里插入代码片xmlns:p="http://www.springframework.org/schema/p"
<bean id="userDao" class="dao.UserDao"/>
<bean id="userServer" class="server.UserServer“ p:dao-ref="userDao"/>
 <bean id=“user” class=“test.User” p:id=“1”/>

特点:使用属性而不是子元素的形式配置Bean的属性,从而简化了配置代码 语法: 对于直接量(基本数据类型、字符串)属性:p:属性名=“属性值” 对于引用Bean的属性:p:属性名-ref=“Bean的id”

3.构造注入
public User(int id){this.id=id;}

<bean id=“user” class=“test1.User”>
<constructor-arg name="id" value="123"></constructor-arg>
</bean>

注入:
1、注入直接量(基本数据类型、字符串) 如果XML中包含特殊字符(&、<、>、”、’),就使用<![CDATA[]]>标记或把特殊字符替换为实体引用
2、引用其他Bean组件 注入Bean类型的语法:p:属性名-ref=“Bean的id” 使用子元素注入:
3、注入集合类型的属性: 使用、、、标签实现
4、异常抛出增强类型: 在目标方法抛出异常时织入增强处理 aop:after-throwing元素:定义异常抛出增强
5、最终增强特点: 无论方法抛出异常还是正常退出,该增强都会得到执行,类似于finally aop:after元素:定义最终增强
环绕增强特点: 目标方法前后都可织入增强处理 功能最强大的增强处理 可获取或修改目标方法的参数、返回值,可对它进行异常处理,甚至可以决定目标方法是否执行 aop:around元素:定义环绕增强
使用注解定义Bean:
@Component
@Repository(用于标注DAO类)
@Service(用于标注业务类)
@Controller(用于标注控制器类)
@Autowired注解实现Bean装配,默认按类型匹配,可以使用@Qualifier指定Bean的名称
@Component(“userDao”)所有受Spring 管理组件的通用形式 public class UserDaoImpl implements UserDao{}
@Controller 控制类
@Controller
   public class UserAction extends BaseAction{
@Service 业务类
  @Service(“userService”)
  public class UserServiceImpl implements UserService {
@Repository Dao类
  @Repository(value=“userDao”) public class UserDaoImpl extends BaseDaoImpl {
@Autowired
   @Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。
扫描注解 <context:component-scan base-package=“service,dao”/>
使用@Resource注解实现组件装配,默认按名称匹配
AspectJ简介:
面向切面的框架,它扩展了Java语言,定义了AOP 语法,能够在编译期提供代码的织入
AspectJ 5新增的功能,使用JDK 5.0 注解技术和正规的AspectJ切点表达式语言描述切面
@After Throwing注解定义异常抛出增强
Spring在定义切面时提供了多种选择,应根据项目的具体情况做出选择:
1、如果项目采用JDK 5.0或以上版本,可以考虑使用@AspectJ注解方式,减少配置的工作量
2、如果不愿意使用注解或项目采用的JDK版本较低无法使用注解,则可以选择使用aop:aspect配合普通JavaBean的形式
通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
功能:
切面: 连接点: 增强处理: 切入点: 目标对象: AOP代理: 编织/织入: 增强处理类型:
Aop的几种方式和各自的适用场合:
Spring提供了4种实现AOP的方式:
1.经典的基于代理的AOP before 前置 after-returning 返回后 after-throwing 抛出后 arround 周围 introduction 引入
2.@AspectJ注解驱动的切面 execution(* greetTo(…))的切点表达式
3.纯POJO切面 单纯声明增强类,通过aop标签使用
4.注入式AspectJ切面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值