欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring中AOP和IOC

程序员文章站 2022-05-27 23:46:13
...
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:before method="pre_study" pointcut-ref="target"/>
public void pre_study(JoinPoint jp){ **在参数中导个包(import org.aspectj.lang.JoinPoint;)
System.out.println("先预习!"+jp.getTarget().getClass());
}
jp.getTarget().getClass()  获得地址信息


2.后置方法: *<aop:after-returning method="do_work" returning="result" pointcut-ref="target"/>
public void do_work(JoinPoint jp,Object result){
System.out.println("学习完毕,返回值是"+result+",做上机练习!");
}

3.环绕方法: *<aop:around method="around" pointcut-ref="target"/>
public Object around(ProceedingJoinPoint pjp){
System.out.println("我是环绕增强的前置增强");
try {
Object result = pjp.proceed();//环绕增强的前置增强和后置增强的分界线

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

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

return result; //完美的替换目标方法的返回值
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}


4.异常抛出方法:*<aop:after-throwing method="do_exception" throwing="e" pointcut-ref="target"/>
public void do_exception(JoinPoint jp,Exception e){
System.out.println("我是异常增强");
}

5.最终方法: *<aop:after method="do_final" pointcut-ref="target"/>
public void do_final(JoinPoint jp){
System.out.println("我是最终增强");
}



</div>

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


1.setter注入方式:
<property name="num" value="1001"></property>
<property name="name" value="张三"></property> //一个参数,对应一个property


2.构造注入:时效性好,没有注入灵活
前提:带参构造器

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

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

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

头文件应用:
xmlns:p="http://www.springframework.org/schema/p"
         <bean id="first" class="AOP.firstAOP" p:name="张三" p:age="23" p:email="zhangsan@qq.com"/>

使用spring的好处

1.不用new对象
2.生命周期从new到xml文件中去了
3.事务处理的特定功能能直接插入