ioc的注解使用,aop

IOC注解开发
spring的IOC注解开发需要添加context注解约束
IOC开发则需要引入beans注解约束
在DI属性注入的时候,IOC注解方式不需要set方法可以直接在属性上面DI进值
@value=“张三”
private string name;
对象属性注解方式注入用@Autowired因为我们习惯是按名字完成注入:所以就必须让!@Autowired和@Qualifier(value=“需要注解的对象的注解名字”)
可以用@Resource来替代上面的俩,来完成对象的注解

spring的IOC注解@component :修饰一个类,将这个类交给spring管理这个注解有三个衍生类:
@Controller:web层
@service:service层
@Repository:dao层

Bean作用范围的注解
@Scope :作用范围
singleton:默认单例
prototype:多例

XML和注解的比较
xml: 可以适用任何场景
好处:结构清晰,后期方便维护
注解:有些地方用不了,比如:这个类,不是自己提供的
好处:开发方便

XML和注解两种方式混合使用时需要在xml中引入
context:annotation-config/
底层AOP实现原理
JDK动态代理:只能对实现了接口的类产生代理
Cglib动态代理:对没有实现接口的类产生代理对象,生成子类对象。

反射 用的时Class
动态代理用的时Proxy

spring的术语
连接点Joinpoint:可以拦截到的点
切入点Poincut:真正被拦截到的点
通知Advice:通知,方法层面的增强
引介Introduction:类层面的增强
目标Target:被增强的对象
织入Weaviong:将通知应用(Advice)到目标(Target)的过程 将权限校验的方法的代码应用到UserDao的save方法的过程就是织入
代理Proxy:被增强后产生的代理对象
切面Aspect:多个通知和多个切入点的组合,比如拦截器

AOP入门:
1,创建目标类
2,配置目标对象的xml

3,编写测试类
Spring整合JUnit单元测试类
引入相应的jar包test包
在测试类中添加@RunWith(SpringJUnit4ClassRunner) @ContextConfiguration(“classpath:applicationContext.xml”)注解(注解是固定的)
在测试类中添加@Resource(name=”目标类的对象productDao”)注解
创建目标类的对象private ProductDao productDao;
在测试方法中调用目标类的对象的方法即连接点。
!

4,编写一个切面类:切入点和通知的整合
比如说权限校验的方法

5,在xml中配置,将切面类交给spring管理
bean id=”myAspect” class=”” />

6,配置AOP实现对目标代理控制

表达式配置表示哪些类的哪些方法需要进行增强
<aop:pointcut expression="execution(*切入点的完整路径Demo2.ProductDemoImple.save(..))" <id="AOP配置的idpointcut1"/>

7,配置切面

`<aop:aspect ref="切面类的id比如上面的myAspect"> 
在方法执行之前校验就用before,之后用after 
<aop:before method="切面的方法" poincut-ref="AOP配置的id比如pointcut1"/> 
</aop:sapect> 
</aop:config> 

上面的表达式中的execution中的*代表任意返回值,方法save中的两个小数点代表任意参数 .

spring中的通知类型
1,前置通知:在目标方法执行之前进行操作
可以获得切入点的信息,传入参数JoinPoint joinPoint然后打印就可以获得切入点的信息

2,后置通知:在目标方法执行之后进行操作
可以获得方法的返回值然后在切面类的后置通知的方法内传入一个Object类型的以配置的返回值id为名字的参数 打印即可获得切点的返回值

3,环绕通知:在目标方法执行之前和之后进行操作
在切面内配置方法时,先配置环绕前置通知,再配置切入点方法Object obj=joinPoint.proceed()最后配置环绕后置通知,因为切入点可能有返回值所有最后要return obj;还要在方法内传参PeoceedingJoinPoint joinPoint,再在XML内配置切面aop:around method=”切入点相应的的方法” pointcut-ref=”AOp配置的id”

4,异常抛出通知:在程序异常的时候,进行的操作
直接在切面配置方法时需要传入在AOP中配置的异常id的参数Throwable ex,,打印输出ex.getMessage(),配置APO:aop:after-throwing method=”切入点相应的的方法” pointcut-ref=”AOp配置的id” throwing=”配置异常的id ex”

5,最终通知:总是会操作!
aop:after method=”切入点相应的的方法” pointcut-ref=”AOp配置的id”

切入点的表达式语法:
基于execution的函数完成的
语法 访问修饰符 方法返回值 包名.类名.方法名(参数)
public void com.spring.CustomerDao.save(…) 返回值为void类型在包com.spring下CustomerDao类中的切入点save()传入的切入点的参数为任意类型

  • ..*Dao.save(…) 任意返回值,任意包下的名字最后为Dao的类的save方法传入的切入点的参数为任意类型
  • com.spring.CustomerDao+.save(…) 返回值为任意类型在包com.spring下CustomerDao类及其子类的切入点save()传入的切入点的参数为任意类型
  • com.spring..(…)返回值为任意类型在包com.spring下任意类中的任意切入点 切入点传入的参数为任意类型

配置切面类

<bean id="myAspectXml" class="cn.itcast.spring.demo3.MyAspectXml"></bean> 

进行 aop 的配置

<aop:config> 
<aop:pointcut expression="execution(* cn.itcast.spring.demo3.*Dao.save(..))" id="pointcut1"/> 
<aop:pointcut expression="execution(* cn.itcast.spring.demo3.*Dao.delete(..))" id="pointcut2"/> 
<aop:pointcut expression="execution(* cn.itcast.spring.demo3.*Dao.find(..))" id="pointcut4"/> 
配置切面 
<aop:before method="before" pointcut-ref="pointcut1"/> 
<aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4"/> 
<aop:after method="after" pointcut-ref="pointcut4"/> 
</aop:aspect> 
</aop:config> 

编写切面类advice
在这里插入图片描述

编写测试类
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值