初入aop面向切面编程

本文介绍AOP(面向切面编程)的概念及其作为OOP补充的优势,并通过Spring框架的示例展示了如何使用注解配置切入点、前置通知、后置通知等关键组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Aop面向切面编程:可扩展性强,是对oop(面向对象编程)的一个补充和完善。oop采用的是继承,封装,多态,建立一种对象的层次机构,用来描述一个公共行为的一个集合。当我们需要为分散的对象引入公共行为oop显得无能为力。oop是从上到下的关系,不适合从左到右。例如日志。它与分散对象的核心功能毫无关系,采用Aop减少代码量。

Aop技术分类:动态代理技术,静态植入方式。

下面是一些代码演示:

这是在spring-servlet.xml的aop配置

可以通过配置bean横向切入,也可以通过注解来实现,下面是注解演示代码

@Aspect
@Component
public class PointCuts {
//自己定义切入点
@Pointcut("execution(* com.leige.service.*.*(..))")
public void a(){};
/*@Before("a()")*/
public void before (){
System.out.println("插入数据");
}
@After("execution(public boolean com.leige.service.UserService.inserIntoUser(com.leige.entity.User))")
public void after(){
System.out.println("插入数据结束");
}
//@AfterReturning("a()")
public void afterReturning(){
System.out.println("after return");
}
@AfterThrowing("a()")
public void afterThroeing(){
System.out.println("抛异常了");
}
//@Around("a()")
public Object around(ProceedingJoinPoint pjp) throws Throwable{
//Throwable Exception 两者范围
System.out.println("kkkkkkkkk");
Object obj = pjp.proceed();
System.out.println("jjjjjjjjjjjjj");
return obj;
}
}

UserDao层的代码。添加用户的方法

@Repository(value="userDao")
public class UserDao implements com.leige.impl.UserDao {
@Resource(name="dataSource")
private DataSource dataSource;


public DataSource getDataSource() {
return dataSource;
}


public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}


@Override
/**
* 添加用户
*/
public boolean insertUser(User user) {
String username = user.getName();
String password = user.getPassword();

int age = user.getAge();
if (username == null || password == null || username == ""
|| password == "") {
return false;
}
Connection conn = null;
PreparedStatement ps = null;
try {
// 获得连接
conn = dataSource.getConnection();
// 定义sql语句
String sql = "insert into user (name,password,age)values(?,?,?)";
// 通过连接对象获得预处理语句,加载sql语句
ps = conn.prepareStatement(sql);
// 设置问号参数
ps.setString(1, username);
ps.setString(2, password);
ps.setInt(3, age);
// 执行更新
ps.executeUpdate();
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("关流失败");
e.printStackTrace();
} finally {
try {
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

return false;
}

Service业务层代码

@Service("userService")
public class UserService {
@Resource(name="userDao")
private UserDao userDao;


public  UserDao getUserDao() {
return userDao;
}


public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}

//添加用户
public boolean inserIntoUser(User user){


boolean flag = userDao.insertUser(user);
return flag;
}

UserController控制层代码

@Controller
@RequestMapping("/userController")
public class UserController {
@Resource(name="userService")
private UserService userService;


public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}

@RequestMapping("/insert")
/**
* 添加用户信息
* @param user
* @return boolean
*/
public String inserIntoUser(User user){
System.out.println("1111");

boolean flag = userService.inserIntoUser(user);
System.out.println("2222");
if (flag) {
System.out.println("注册成功");
return "success";
}else {
System.out.println("注册失败");
return "fail";
}

}

Demo测试

public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("WebRoot/WEB-INF/springmvc-servlet.xml");
UserController uc = (UserController) context.getBean("userController");
User user = new User();
user.setAge(12);
user.setName("磊哥");
user.setPassword("222222");
uc.inserIntoUser(user);

}

运行结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值