AOP入门案例「黑马」

1.创建一个maven项目

取名为aop_quickstart:
在这里插入图片描述

2.把模板创建好

1.java下建一个itheima包

在这里插入图片描述

2.在itheima包下建两个包和一个类:

在这里插入图片描述

3.在两个报下建两个类

在这里插入图片描述

二级目录4.在impl包下继续建一个类

在这里插入图片描述
这样模板就建好了。

3.导入依赖

<!--SpringIOC相关依赖-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <!--AOP相关依赖-->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.4</version>
        </dependency>

4.各个类的配置

1. SpringConfig类

package itheima.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("itheima")
public class SpringConfig {
}

2. BookDaoImpl类

package itheima.dao.impl;

import itheima.dao.BookDao;
import org.springframework.stereotype.Repository;

@Repository
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println(System.currentTimeMillis());
        System.out.println("book dao save ... ");
    }

    public void update() {
        System.out.println("book dao update ... ");
    }
}

3. BookDao接口类

package itheima.dao;

public interface BookDao {
    public void save();
    public void update();
}

4. APP类

package itheima;

import itheima.config.SpringConfig;
import itheima.dao.BookDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class APP {
    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        BookDao bookDao = ctx.getBean(BookDao.class);
        bookDao.save();
    }
}

5.运行APP类

结果如下图:
在这里插入图片描述
结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个基于 Spring AOP 的事务管理的简单案例: 首先,我们需要在 Spring 配置文件中配置事务管理器和事务通知: ``` <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 配置事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="get*" read-only="true" propagation="SUPPORTS"/> <tx:method name="query*" read-only="true" propagation="SUPPORTS"/> </tx:attributes> </tx:advice> <!-- 配置 AOP 切面 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.example.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation"/> </aop:config> ``` 以上配置文件中,我们首先配置了一个事务管理器 `transactionManager`,它是 Spring 提供的 JDBC 事务管理器,用于管理数据库事务。然后,我们配置了一个事务通知 `txAdvice`,它定义了事务的传播属性和操作类型。最后,我们配置了一个 AOP 切面 `serviceOperation`,它拦截所有 `com.example.service` 包下的方法,并将事务通知应用于这些方法。 接下来,我们在服务层代码中使用 `@Transactional` 注解来定义事务边界: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override @Transactional public void addUser(User user) { userDao.addUser(user); } @Override @Transactional public void updateUser(User user) { userDao.updateUser(user); } @Override @Transactional public void deleteUser(int userId) { userDao.deleteUser(userId); } @Override public User getUser(int userId) { return userDao.getUser(userId); } @Override public List<User> queryUsers(String keyword) { return userDao.queryUsers(keyword); } } ``` 在上面的代码中,我们在服务层的每个方法上使用了 `@Transactional` 注解来标记事务边界。当这些方法被调用时,AOP 拦截器会检查是否存在事务边界,如果存在,则创建一个新的事务或者加入已有的事务,并在方法执行结束后提交或回滚事务。 这就是一个简单的基于 Spring AOP 的事务管理案例。通过使用 AOP 和声明式事务处理,我们可以将事务管理从业务逻辑中解耦出来,并实现事务的统一管理和控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

垫脚摸太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值