什么面向对象编程,什么是面向切面编程
面向对象编程是一种编程范式,它将现实世界的实体抽象成一个个独立的对象,通过封装、继承和多态等方式来组织和管理代码。面向对象编程的三大特征分别是封装、继承和多态。
封装是指将数据和方法封装在一个类中,通过对外提供公共的接口来访问和修改内部状态。这样可以隐藏内部实现细节,提高代码的安全性和可维护性。
继承是指一个类可以继承另一个类的属性和方法,并可以在此基础上进行扩展和修改。继承可以实现代码的复用和扩展。
多态是指同一种类型的对象可以有不同的表现形式,可以在不同的场景中具有不同的行为。多态可以实现代码的灵活性和可扩展性。
面向切面编程(Aspect-oriented Programming,AOP)是一种编程范式,它通过将程序的业务逻辑和横切关注点(如安全性、事务、日志、缓存等)分离,来提高代码的可重用性、可维护性和可移植性。
AOP 主要采用的实现方式是代理模式和反射机制。AOP 的核心概念是切面、连接点、切点和通知。
切面是横切关注点的实现,它包括了一组通知和一个切点。
连接点是在程序执行过程中能够插入切面的点,比如方法调用、异常捕获、字段赋值等。
切点是连接点的集合,它定义了哪些连接点会被应用切面。
通知是切面具体的行为,包括前置通知、后置通知、异常通知、环绕通知等。
以下是一个使用面向对象编程的 Java 代码示例:
class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void study() {
System.out.println(name + " is studying.");
}
}
public class Main {
public static void main(String[] args) {
Student student = new Student("Tom", 18);
student.study();
}
}
以下是一个使用面向切面编程的 Spring AOP 的 Java 代码示例:
public interface UserDao {
void save();
}
public class UserDaoImpl implements UserDao {
@Override
public void save() {
System.out.println("Saving user...");
}
}
public class LogAspect {
public void before() {
System.out.println("Before saving user...");
}
public void after() {
System.out.println("After saving user...");
}
}
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao) context.getBean("userDao");
userDao.save();
}
}
在这个例子中,UserDao 是一个接口,UserDaoImpl 是它的实现类,LogAspect 是一个切面,它包括了前置通知和后置通知。在Main类中,通过 Spring 的容器来获取 UserDAO 的实例,在调用 save() 方法时,切面会自动插入到程序执行过程中,完成日志记录的工作。
还没有评论,来说两句吧...