第六章:Spring框架深入学习

6.1增强类型扩展
在Spring框架中,增强(Advice)和类型扩展(Type Extensions)是AOP(面向切面编程)概念的一部分,用于在不修改源代码的情况下,为应用添加额外的行为。虽然Spring本身并不直接提供一个名为“类型扩展”的明确术语,但我们可以将其理解为通过AOP来扩展或修改类的行为,这通常通过动态代理或字节码操作实现。

1. AOP与增强
AOP允许开发者将横切关注点(如日志、事务管理、安全等)从业务逻辑中分离出来,并在运行时将它们动态地织入到应用程序中。增强(Advice)是AOP中的一个核心概念,它代表了要注入到目标对象连接点(如方法调用)的额外行为。

增强类型包括:

前置增强(Before Advice):在目标方法执行之前执行。
最终增强(After Advice):在目标方法执行之后执行,无论方法执行是否成功。
语法:

<aop:config>
     <aop:aspect ref="增强方法所在的Bean">
          <aop:after method="增强处理方法" pointcut-ref="切入点id"/>
     </aop:aspect>
</aop:config>
抛出异常后增强(After Throwing Advice):在目标方法抛出异常后执行。
语法:

<aop:config>
     <aop:aspect ref="增强方法所在的Bean">
          <aop:after-throwing method="增强处理方法"
               pointcut-ref="切入点id" throwing="e"/>
     </aop:aspect>
</aop:config>
环绕增强(Around Advice):在目标方法执行前后执行,并且可以决定是否继续执行目标方法或中断执行流程。
语法:

<aop:config>
     <aop:aspect ref="增强方法所在的Bean">
          <aop:around method="增强处理方法" pointcut-ref="切入点id" />
     </aop:aspect>
</aop:config>
2. Spring AOP的实现方式
Spring AOP主要通过两种方式来实现:

基于代理的AOP:这是Spring AOP的默认方式,它依赖于JDK动态代理(针对接口)或CGLIB(针对类)来创建目标对象的代理。当代理对象的方法被调用时,Spring AOP框架会拦截这个调用,并根据配置执行相应的增强逻辑。

基于AspectJ的AOP:AspectJ是一个完整的AOP框架,它提供了编译时和加载时的AOP支持。Spring提供了与AspectJ的集成,允许开发者使用AspectJ的注解或XML配置来定义切面。这种方式可以支持更复杂的AOP需求,包括更细粒度的控制和更强大的织入能力

6.2 依赖注入方式扩展
依赖注入(Dependency Injection,简称DI)是Spring框架中的一个核心概念,它允许对象在创建时不依赖于其他具体类的实例,而是依赖于抽象的接口或类。这样可以在运行时动态地将依赖关系注入到对象中,从而实现了对象之间的解耦。依赖注入的方式主要有以下几种:

1. 构造器注入(Constructor Injection)
构造器注入是通过类的构造器来注入依赖项。在Spring配置文件中,可以通过<constructor-arg>标签来指定注入的依赖项。

语法:

<bean id="唯一标识" class="类的全路径">
    <constructor-arg name="参数名称" ref="依赖对象" />
</bean>
2.p命名空间注入 
在Spring框架中,p命名空间注入是一种XML配置方式,它允许你直接在<bean>标签的属性中注入依赖项,而不需要使用<property>或<constructor-arg>子标签。这种方式使得XML配置更加简洁,但请注意,随着Spring注解的广泛使用,p命名空间注入在现代Spring应用中可能不如注解注入那样常见

语法:

<bean id="唯一标识" class="类的全路径"
    p:"属性1"="注入的值"p:"属性2"="注入的值" />
<bean id="唯一标识" class="类的全路径"
    p:属性-ref="注入的Bean" />
3. 不同数据类型的注入
在Spring框架中,不同数据类型的注入是通过Spring的配置文件(如XML配置文件)或注解来实现的。这些数据类型包括基本数据类型(如int、String等)、集合类型(如List、Set、Map等)以及自定义对象类型等。以下是对不同数据类型注入的详细说明:

1. 基本数据类型和字符串的注入
对于基本数据类型(如int、float等)和字符串(String),可以直接使用<value>标签在Spring的XML配置文件中进行注入。例如:

<bean id="myBean" class="com.example.MyClass">  
    <property name="myIntProperty" value="10"/>  
    <property name="myStringProperty" value="Hello, Spring!"/>  
</bean>
或者,如果使用注解方式,可以通过@Value注解来注入:

@Component  
public class MyClass {  
    @Value("${my.int.property}")  
    private int myIntProperty;  
  
    @Value("${my.string.property}")  
    private String myStringProperty;  
  
    // getters and setters  
}
这里${my.int.property}和${my.string.property}是从Spring的配置文件中(如application.properties或application.yml)读取的属性值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值