Spring笔记

IOC控制反转

 

(1)Bean标签常用属性

   id属性:名称,根据值来获得配置对象。(不能包含特殊字符,下划线也不可以)

   name属性:功能与id属性一样,但是可以包含特殊字符。(不常用)

   class属性:创建对象所在类的全路径。

   scope属性:Bean的作用范围。属性值主要singleton(单例)(默认)和prototype(多例)。(session,request)

 

(2)注入对象

 <  bean       id = " "      class = " "  >

      < property   name = "类属性名称"    ref = "注入对象名称"/>

 < /bean >

 

(3)注入复杂类型

(1)数组

 <  bean       id = " "       class = " "  >

      < property name = " " >

               < list >

                         < value >   </value>

                         < value >   </value>

               < /list >

      < /property >

 < / bean >

 

(2)List(数组一样)

 

(3)Map

   < map >

              < entry  key =" "    value=" " />

              < entry  key =" "    value=" " />

    < /map >

 

(4)Properties

   < props >

              < prop  key =" "  />    </prop>

              < prop  key =" "  />    </prop>

    < /props >

 

 

AOP面向切面编程

 

AOP的术语:

Join point连接点就是spring中允许使用通知的地方,基本上每个方法前后抛异常时都可以是连接点。
Advice通知这是实际行动之前或之后执行的方法。需要完成的工作叫做通知,就是比如事务、日志等的实现逻辑。
Pointcut切点

其实就是筛选出的连接点,一个类中的所有方法都是连接点,但又不全需要,会筛选出某些作为连接点做为切点。如果说通知定义了切面的动作或者执行时机的话,切点则定义了执行的地点。

Aspect切面通知和切点的结合,通知和切点共同定义了切面的全部内容,包括执行的时间、地点、执行的逻辑方法。
Introduction引入在不改变一个现有类代码的情况下,为该类添加属性和方法,可以在无需修改现有类的前提下,让它们具有新的行为和状态。
Target object目标被一个或者多个方面所通知的对象,这个对象永远是一个被代理对象。也称为被通知对象。
Weaving织入

把切面加入程序代码的过程。切面在指定的连接点被织入到目标对象中,在目标对象的生命周期里有多个点可以进行织入:

 

编译期:切面在目标类编译时被织入,这种方式需要特殊的编译器

类加载期:切面在目标类加载到JVM时被织入,这种方式需要特殊的类加载器,它可以在目标类被引入应用之前增强该目标类的字节码

运行期:切面在应用运行的某个时刻被织入,一般情况下,在织入切面时,AOP容器会为目标对象动态创建一个代理对象,Spring AOP就是以这种方式织入切面的。


AOP通知类型:

Before前置通知在一个方法执行之前,执行通知。
After后置通知 在一个方法执行之后,不考虑其结果,执行通知。

AfterReturning

返回后通知在一个方法执行之后,只有在方法成功完成时,才能执行通知。
Throws抛出异常后通知 在一个方法执行之后,只有在方法退出抛出异常时,才能执行通知。
Around环绕通知 在建议方法调用之前和之后,执行通知。

 

Pointcut的定义包括两个部分:Pointcut表示式(expression)和Pointcut签名(signature)

@Pointcut("execution(* com.aop.*(..))")               //Pointcut表示式
private void method(){}                               //Point签名


然后要使用所定义的Pointcut时,可以指定Pointcut签名

@After("method()")   


这种使用方式等同于以下方式,直接定义execution表达式使用

@After("execution(* com.aop.*(..))")

切面示例:

@Component
@Aspect
public class Aspect {

    @Pointcut("execution(* com.aop.*(..))")
    public void method() {

    }

    @After("method()")
    public void after(JoinPoint JoinPoint) {
        try {
          ...
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值