-
IoC(Inversion of Control):控制反转模式,其基本思想是由容器控制程序之间的关系,而不是由代码直接控制。通过应用配置,实现对象的组装与初始化,并将对象之间的依赖关系交给 Spring 容器来管理。
-
AOP(Aspect-Oriented Programming):面向切面编程,基本思想是将系统的功能分为核心关注点和横切关注点,通过在横切关注点上运用 AOP 技术,实现与核心关注点无关的功能增强,在不改变核心代码的情况下,提高了程序的可维护性和可扩展性。
-
工厂模式(Factory Pattern):Spring 框架使用工厂模式来实现对象的创建。Spring 容器负责创建对象,并维护对象的生命周期。
下面通过一个简单的例子来说明工厂模式在 Spring 框架中的应用:
// 定义接口 public interface UserService { String getUserName(); } // 实现接口 public class UserServiceImpl implements UserService { @Override public String getUserName() { return "John Doe"; } } // 定义工厂类 public class UserServiceFactory { public static UserService getUserService() { return new UserServiceImpl(); } } // 测试代码 public class FactoryDemo { public static void main(String[] args) { // 获取用户服务对象 UserService userService = UserServiceFactory.getUserService(); // 使用用户服务对象 String userName = userService.getUserName(); System.out.println("User name: " + userName); } }
在上述代码中,我们定义了一个接口
UserService
和一个实现该接口的类UserServiceImpl
,用于模拟一个用户服务。然后,我们定义一个工厂类UserServiceFactory
,该类中实现了一个静态工厂方法getUserService()
,用于返回UserServiceImpl
的实例。最后,在测试代码中,我们使用静态工厂方法
UserServiceFactory.getUserService()
获取一个UserServiceImpl
的实例,然后使用该实例的getUserName()
方法获取用户名称。在 Spring 的实际应用中,工厂模式通常与 IoC 容器一起使用。容器负责实例化对象,即通过反射等方式创建对象,并维护其生命周期。在 Spring 框架中,所有的 bean 对象都是在容器中被创建和管理的。例如,使用 XML 配置文件声明一个 bean:
<bean id="userService" class="com.example.UserServiceImp" />
在 Spring 容器启动时,容器会自动创建
UserServiceImp
的实例,并把该实例注册到容器的 Bean 容器中,然后可以使用getBean()
方法获取该实例。
-
单例模式(Singleton Pattern):Spring 容器默认将 bean 容器中的对象作为单例模式的,也可以显式指定 bean 的作用域。
单例模式的三种创建方式以及他们最本质的区别:
懒汉模式:时间换空间,会存在线程安全问题,需要在写的静态方法上面添加“synchronized”
饿汉模式:空间换时间,在一开始就创建对象,这样就不会存在线程安全问题,下面是列子:
枚举法模式:枚举法 本质上就是一个常量,所以直接写常量就行了(注意是大写):
-
模板方法模式(Template Method Pattern):Spring 提供了基于模板方法模式的 JdbcTemplate,用户只需要实现回调接口中的 SQL 方法即可完成数据库操作。
-
观察者模式(Observer Pattern):Spring 中的事件机制就是基于观察者模式实现的,通过注册监听器,可以监听特定事件的发生,并在事件发生时执行相应的逻辑。
-
策略模式(Strategy Pattern):Spring 中的对策略模式的应用体现在 AOP 的切面类中,定义了不同的增强行为,可以根据需要进行组合或替换其中的增强行为等。
-
适配器模式(Adapter Pattern):Spring MVC 中的 HandlerAdapter 就是基于适配器模式进行设计的,用于将不同类型的请求适配为处理器可以处理的类型。
Spring框架中含有的设计模式有哪些?
最新推荐文章于 2024-07-17 14:39:25 发布