一、前言
在SSM-Spring【aop大致实现原理】中通过手动实现动态代理总结了Spring实现AOP的大致原理,SSM-Spring【实现AOP】中则总结了实现AOP的一个小案例,因此本文主要通过两者结合,将SSM-Spring【aop大致实现原理】中的案例修改为通过实现Spring的AOP来达到减少重复代码的效果。
二、原本的项目
(一)项目结构和数据库表
项目结构如下:
数据库表结构:
该表为spring数据库下的名为account的表
数据库表数据:
(二)domain
Account.java:
1 | public class Account implements Serializable { |
(三)dao
IAccountDao.java:
1 | /** |
AccountDaoImpl.java:
1 | public class AccountDaoImpl implements IAccountDao { |
(四)service
IAccountService.java:
1 | public interface IAccountService { |
AccountServiceImpl.java:
1 | public class AccountServiceImpl implements IAccountService { |
(五)factory
BeanFactory.java:
1 | /** |
(六)utils
ConnectionUtils.java:
1 | /** |
TransactionManager.java:
1 | /** |
(七)配置
bean.xml:
1 |
|
三、XML方式实现AOP
(一)项目结构
(二)domain
Account.java:
1 | 同上 |
(三)dao
IAccountDao.java:
1 | 同上 |
AccountDaoImpl.java:
1 | 同上 |
(四)service
IAccountService.java:
1 | 同上 |
AccountServiceImpl.java:
1 | 同上 |
(五)utils
ConnectionUtils.java:
1 | 同上 |
TransactionManager.java:
1 | 同上 |
(六)配置
bean.xml:
1 |
|
四、注解方式实现AOP
(一)项目结构
(二)domain
Account.java:
1 | public class Account implements Serializable { |
(三)dao
IAccountDao.java:
1 | 同上 |
AccountDaoImpl.java:
1 | "accountDao") ( |
(四)service
IAccountService.java:
1 | 同上 |
AccountServiceImpl.java:
1 | "accountService") ( |
(五)utils
ConnectionUtils.java:
1 | /** |
TransactionManager.java:
1 | /** |
(六)配置
bean.xml:
1 |
|
五、总结
Spring的AOP实现原理就是动态代理,因此不需要自己手动实现动态代理。
能达到使用较少代码且简简单单就能实现方法增强(提取公共代码,提高代码可重用度)的目的。
Java新手,若有错误,欢迎指正!