spring面向切面编程(AOP)
1.基于注解
1.1配置spring配置文件
扫描注解创建代理对象
<context:component-scan base-package="com.frt"></context:component-scan>
开启基于注解的切面编程
<aop:aspectj-autoproxy/>
在测试类中创建切面注入点
@Pointcut("execution(* com.frt.service.impl.UserServiceImpl.*(..))")注解
public void pointcut(){}
@Before("pointcut()")
Before注解作为例子,其他注解一样的语法(After,AfterReturning,AfterThrowing)
@Around环绕通知是最特殊和最常用的需要用ProceedingJoinPoint来获取原始方法
最后在单位测试方法中进行
UserService userService = new MyBeanFactory().creatUserServiceImplProxy();
userService.addUser();
3.基于注解的事物管理器
3.1配置数据源
引入 Jdbc.properties文件
<context:property-placeholder location="Jdbc.properties文件"></context:property-placeholder>
创建数据源对象
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
创建JdbcTemplate对象用springJdbc访问数据库并进行操作
<bean class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
3.2配置事物管理器
配置事物管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
开启事物注解驱动
transactionManager为默认值,当事物管理器的ID为初始值是transaction-manager属性可以不写
<tx:annotation-driven transaction-manager="transactionManager"/>
根据Xml配置事物管理器
<tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="方法名"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="tx" pointcut="execution(* com.frt.service.impl.UserServiceImpl.*(..))"
</aop:config>
1.3在标注了@Bean的类中(Jdbcconfig类)配置事物管理器
@Bean
public PlatformTransactionManager formTransactionManager (DataSource dataSource){
DataSourceTransactionManager transactionManager=new DataSourceTransactionManager;
transactionManager.setDataSource(dataSource)
return transactionManager;
}
在需要进行事物管理的方法上标注@Transactional注解声明该方法需要进行事物管理
在springConfig类上标注@EnableTransactionManagement开启基于注解的事物管理