spring练习二

首先我先理解AOP编程和事务管理

面向对象编程(Object-Oriented Programming,简称 OOP)是一种基于对象的软件开发方法。在OOP中,我们将现实世界中的事物抽象成一个个对象,并通过对象之间的交互来完成各种功能。OOP主要包含以下三个基本概念:

封装:将数据和对数据的操作封装在一起,以便对象能够控制自己的状态和行为。继承:通过继承机制,可以使子类获得父类的属性和方法,从而减少重复代码的编写。多态:多态指的是同一个方法调用,在不同情况下会产生不同的结果,这使得我们可以使用统一的接口来处理不同的对象。

AOP编程面向切面编程(Aspect-Oriented Programming,简称 AOP):是一种程序设计思想,它可以让我们将共性问题解耦出来,从而实现更好的模块化和复用性。AOP中的核心概念是切面(aspect)、连接点(join point)和通知(advice)。切面定义了在哪些连接点上应该执行通知,通知则定义了要在连接点上执行的具体操作。

事务管理:事务指的是在数据库操作中,一组相关的操作被视为一个整体进行处理。如果其中任意一个操作失败,整个事务将回滚,即所有操作都失效。事务管理是指对这些操作进行管理,以确保它们都成功或都失败。

了解这些后,我开始了实操

练习how2j面向sop的编程,理解面向对象编程的含义这部分内容是在how2j网站上的Spring系列教材中学习的,主要涉及AOP编程的基础知识和相关概念。这里给出其中的一个示例代码:

public interface UserDao {
    void addUser();
    void deleteUser();
}

public class UserDaoImpl implements UserDao {
    @Override
    public void addUser() {
        System.out.println("添加用户");
    }

    @Override
    public void deleteUser() {
        System.out.println("删除用户");
    }
}

public class UserDaoProxy implements UserDao {
    private UserDao userDao;

    public UserDaoProxy(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void addUser() {
        System.out.println("开始添加用户...");
        userDao.addUser();
        System.out.println("添加用户完成。");
    }

    @Override
    public void deleteUser() {
        System.out.println("开始删除用户...");
        userDao.deleteUser();
        System.out.println("删除用户完成。");
    }
}

public class Test {
    public static void main(String[] args) {
        UserDao userDao = new UserDaoImpl();
        UserDaoProxy proxy = new UserDaoProxy(userDao);
        proxy.addUser();
        proxy.deleteUser();
    }
}

这段代码模拟了一个简单的代理模式,其中 UserDao 接口定义了两个方法 addUser 和 deleteUser,UserDaoImpl 类实现了这两个方法。在 UserDaoProxy 类中对 addUser 和 deleteUser 进行了增强操作,然后在 Test 类中创建 UserDaoImpl 对象并通过 UserDaoProxy 进行使用。

练习p262 11-6的案例,体会编程式事务管理。这部分内容是在Spring实战教材第11章“为数据添加事务支持”的第6节“基于编程的事务管理”中学习的。下面是示例代码:

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
    public void add(User user) {
        userDao.addUser(user);
    }

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
    public void delete(int id) {
        userDao.deleteUser(id);
    }
}

@Component
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public void addUser(User user) {
        String sql = "INSERT INTO user(name, age) VALUES (?, ?)";
        jdbcTemplate.update(sql, user.getName(), user.getAge());
    }

    public void deleteUser(int id) {
        String sql = "DELETE FROM user WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }
}

public class Test {
    @Test
    public void test() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = context.getBean(UserService.class);
        User user = new User();
        user.setName("Bob");
        user.setAge(23);
        userService.add(user);
        userService.delete(1);
    }
}

这段代码中使用了编程式事务管理,即在 UserService 的 add 方法和 delete 方法上添加了 @Transactional 注解,并指定了传播行为和隔离级别。在 Test 类中创建 ApplicationContext 对象并获取 UserService 对象,然后调用其 add 和 delete 方法即可完成相应的数据库操作。

练习p263 11-7的案例,体会声明式事务管理。这部分内容也是在Spring实战教材第11章“为数据添加事务支持”的第7节“基于声明式事务管理”中学习的。下面是示例代码:

@Configuration
@EnableTransactionManagement
@PropertySource("classpath:jdbc.properties")
public class AppConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource());
        return transactionManager;
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }

    @Bean
    public UserDao userDao() {
        return new UserDaoImpl();
    }

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;

    @Override
    @Transactional
    public void add(User user) {
        userDao.addUser(user);
    }

    @Override
    @Transactional
    public void delete(int id) {
        userDao.deleteUser(id);
    }
}

public interface UserDao {
    void addUser(User user);
    void deleteUser(int id);
}

@Repository
public class UserDaoImpl implements UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void addUser(User user) {
        String sql = "INSERT INTO user(name, age) VALUES (?, ?)";
        jdbcTemplate.update(sql, user.getName(), user.getAge());
    }

    @Override
    public void deleteUser(int id) {
        String sql = "DELETE FROM user WHERE id = ?";
        jdbcTemplate.update(sql, id);
    }
}

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
        UserService userService = context.getBean(UserService.class);
        User user = new User();
        user.setName("Tom");
        user.setAge(22);
        userService.add(user);
        userService.delete(1);
        context.close();
    }
}

这段代码中使用了声明式事务管理,即在 AppConfig 类中通过 @EnableTransactionManagement 注解开启了事务管理,并配置了数据源和事务管理器。在 UserServiceImpl 中对 add 方法和 delete 方法进行了事务注解的配置,并在 Test 类中调用相应的方法完成数据库操作。

总结一下,本次实验主要学习了AOP编程和事务管理两个方面的内容。在AOP编程中,我们学习了切面、连接点和通知等概念,并通过示例代码模拟了一个简单的代理模式。在事务管理中,我们学习了编程式事务管理和声明式事务管理两种方式,并通过示例代码对其进行了实现。这些知识点都是Spring框架中非常重要的组成部分,掌握它们对于我们使用Spring进行应用开发非常有帮助。

这是我实操过程中的图片

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值