Spring中的AOP(掌握)

Spring中的AOP(掌握)

一:AOP的相关术语
1. JoinPoint(连接点):表示需要增强的类所对应的方法
2. PoinfCut(切入点):表示需要对一些方法进行增强的定义(本质上就是那些连接点)
3. Advice(通知/增强):表示增强所需要的方法,就是需要扩展的方法,再拦截到JoinPoint需要做的事,通知类型分为:前置通知、后置、异常、最终、环绕
4. Proxy(代理):一个类被AOP织入增强后,就产生了一个结果代理类
5. Aspect(切面):是切入点和通知的结合
二:基于XML的AOP配置
  1. 依赖的jar包:略 spring的ioc和aop核心的炸包,都需要导入
  2. 配置bean.xml,spring的ioc
 <bean id="accountService" class="com.ityouxin.service.impl.AccountServiceImpl">
        <!--给AccountServiceImpl中定义的accountDao注入一个值,值是accountDao bean对象-->
        <property name="accountDao" ref="accountDao" />
    </bean>
    <bean id="accountDao" class="com.ityouxin.dao.impl.AccountDaoImpl">
            <!--在AccountDaoImpl类中调用runner的方法执行sql语句,操作数据库-->
            <property name="runner" ref="runner" />
            <property name="connectionUtils" ref="connectionUtils" />
    </bean>
    <bean id="runner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
        <!--runner里面需要一个数据源,因为runner要操作这个数据库-->
        <constructor-arg name="ds" ref="dataSource"/>
    </bean>

    <!--配置获取连接的工具类-->
    <bean id="connectionUtils" class="com.ityouxin.dbutils.ConnectionUtils" >
        <!--把连接池注入给connectionUtils-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring01" />
        <property name="user" value="root" />
        <property name="password" value="root" />
    </bean>
</beans>

  1. 抽取公共类,此类中定义了事务的管理器,其中包括开启,关闭,回滚,释放等通知方法,具体实现省略。。。。

    这里要说一下环绕通知的方法,返回类型Object,传入一个ProceedingJoinPoint类型的
    pjp参数,其中主要的方法pjp.proceed(args);其中参数args是通过pjp.getArgs();得到

  2. 配置公共类(通知类/切面类):

    <bean id=“txManager” class=“com.ityouxin.dbutils.TransactionManager”>

    <property name=“connectionUtils” ref=“connectionUtils”/>
    </bean>

  3. 配置AOP,使用aop:config

<aop:config>
	<--!作用:用于声明开始 aop 的配置  -->
	<aop:aspect id="txAdvice" ref="txManager">
		属性:id:切面类的唯一标识
			 ref:引用切面的bean的id
		<--!作用:用于声明aop 的切面的配置  -->
	</aop:aspect>
	<aop:pointcut>
		作用:配置切入点表达式,用于指定对那些类中的那些方法进行增强
		属性:expression:用于定义切入点表达式  id : 切入点唯一标识
		<aop:pointcut expression="execution(* com.ityouxin.service.*.*(..))" id="pt1" />
		切入点表达式说明:语法:execution([修饰符] 返回值类型 包名.类名.方法名(参数类型)) 
	</aop:pointcut>
</aop:congig>
  1. 使用aop:xxx配置对应的通知类型
aop:before
	作用:
		用于配置前置通知,指定增强的方法再切入点方法执行之前执行
	属性:
		method:用于指定通知增强方法的名称
		pointcut-ref:用于指定切入点表达式的应用
		pointcut:用于指定切入点表达式
aop:after-returning
	作用:后置通知
aop:after-throwing
	异常通知
aop:after
	最终通知

三:基于注解的配置

1. 于xml方式基本类似
2. dao的实现类:bean->@Repository ,  service->@Service  属性注入:@Autowired
3. 在xml配置文件中指定需要扫描的包:<**context:component-scan base-package="com.ityouxin"** />
4. 其他类(通知类):@Component(“txManager”)(切面类)@Aspect(“txManager”)
5. 增强的方法上使用注解: @Before(**"execution(\* com.ityouxin.service.impl.\*.\*(..))"**)。。。
6. 最后(重要):开启spring'对注解AOP的支持:<**aop:aspectj-autoproxy** />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值