spring中AOP和IOC

Spring:包容一切的框架核心:IOC和AOP

IOC:控制反转,也叫依赖注入

控制反转:将对象的控制权从代码移交给xml

控制反转为程序开发带来的好处是:对象统一管理,提高复用性,降低耦合

依赖注入:在xml中赋值

AOP:面向切面,在不影响原有代码基础上,直接在任意位置植入代码(功能)

AOP增强:1.前置:放在目标方法前面

2.后置:放在目标方法后面,异常时不会发生

3.环绕:包括前后置增强,且可以修改目标方法的返回值

4.异常抛出:放在try-catch中的catch中,异常时才会发生

5.最终:最后输出的方法(放在后置后面)

区别于后置:1.可以拿到返回值

2.报错时候,后置不会发生,最终会继续运行,相当于try-catch-final中的final

AOP增强类型的使用

1.前置方法:*<aop:beforemethod="pre_study"pointcut-ref="target"/>

publicvoidpre_study(JoinPointjp){**在参数中导个包(importorg.aspectj.lang.JoinPoint;)

System.out.println("先预习!"+jp.getTarget().getClass());

}

jp.getTarget().getClass()获得地址信息

2.后置方法:*<aop:after-returningmethod="do_work"returning="result"pointcut-ref="target"/>

publicvoiddo_work(JoinPointjp,Objectresult){

System.out.println("学习完毕,返回值是"+result+",做上机练习!");

}

3.环绕方法:*<aop:aroundmethod="around"pointcut-ref="target"/>

publicObjectaround(ProceedingJoinPointpjp){

System.out.println("我是环绕增强的前置增强");

try{

Objectresult=pjp.proceed();//环绕增强的前置增强和后置增强的分界线

result="123";//可以自如的修改目标方法的返回值

System.out.println("我是环绕增强的后置增强");

returnresult;//完美的替换目标方法的返回值

}catch(Throwablee){

e.printStackTrace();

}

returnnull;

}

4.异常抛出方法:*<aop:after-throwingmethod="do_exception"throwing="e"pointcut-ref="target"/>

publicvoiddo_exception(JoinPointjp,Exceptione){

System.out.println("我是异常增强");

}

5.最终方法:*<aop:aftermethod="do_final"pointcut-ref="target"/>

publicvoiddo_final(JoinPointjp){

System.out.println("我是最终增强");

}

</div>

IOC实现依赖注入的方式:(注入值)

1.setter注入方式:

<propertyname="num"value="1001"></property>

<propertyname="name"value="张三"></property>//一个参数,对应一个property

2.构造注入:时效性好,没有注入灵活

前提:带参构造器

<constructor-argindex="0"value="张三">//一个参数,对应一个constructor-arg

</constructor-arg>顺序混淆时,index区分位置,0起始

3.p命名空间注入p:属性名="属性值"

头文件应用:

xmlns:p="http://www.springframework.org/schema/p"

<beanid="first"class="AOP.firstAOP"p:name="张三"p:age="23"p:email="[email protected]"/>

使用spring的好处

1.不用new对象

2.生命周期从new到xml文件中去了

3.事务处理的特定功能能直接插入

相关推荐