單例模式(Singleton)是一種創建型設計模式,它確保一個類只有一個實例,并提供一個全局訪問點。在MyBatis、Redisson、AMQP等依賴包中,單例模式被廣泛應用。以下是這些框架中單例模式的經典實現及舉例:
1. MyBatis 中的單例模式
MyBatis 中的 SqlSessionFactory 是一個典型的單例模式實現。
實現方式:
SqlSessionFactory是一個重量級對象,通常在整個應用生命周期中只需要一個實例。- 通過
SqlSessionFactoryBuilder創建SqlSessionFactory實例,并將其緩存起來。
代碼示例:
public class MyBatisUtil {private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}public static SqlSessionFactory getSqlSessionFactory() {return sqlSessionFactory;}
}
使用場景:
- 在應用中全局共享
SqlSessionFactory實例,避免重復創建和資源浪費。
2. Redisson 中的單例模式
Redisson 中的 RedissonClient 是一個典型的單例模式實現。
實現方式:
RedissonClient是 Redisson 的核心客戶端對象,通常在整個應用中只需要一個實例。- 通過
Redisson.create()方法創建RedissonClient實例,并將其緩存起來。
代碼示例:
public class RedissonUtil {private static RedissonClient redissonClient;static {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");redissonClient = Redisson.create(config);}public static RedissonClient getRedissonClient() {return redissonClient;}
}
使用場景:
- 在應用中全局共享
RedissonClient實例,用于操作 Redis 數據。
3. AMQP(如 RabbitMQ)中的單例模式
在 RabbitMQ 中,ConnectionFactory 和 Connection 通常是單例模式實現。
實現方式:
ConnectionFactory是創建 RabbitMQ 連接的核心對象,通常只需要一個實例。Connection是 RabbitMQ 的連接對象,通常也會被緩存起來復用。
代碼示例:
public class RabbitMQUtil {private static ConnectionFactory connectionFactory;private static Connection connection;static {connectionFactory = new ConnectionFactory();connectionFactory.setHost("localhost");connectionFactory.setPort(5672);connectionFactory.setUsername("guest");connectionFactory.setPassword("guest");try {connection = connectionFactory.newConnection();} catch (Exception e) {e.printStackTrace();}}public static Connection getConnection() {return connection;}
}
使用場景:
- 在應用中全局共享
Connection實例,避免頻繁創建和銷毀連接,提高性能。
總結
單例模式在 MyBatis、Redisson、AMQP 等框架中的經典實現主要體現在以下方面:
- 全局唯一性:確保核心對象(如
SqlSessionFactory、RedissonClient、Connection)只有一個實例。 - 資源復用:避免重復創建和銷毀對象,節省系統資源。
- 全局訪問點:通過靜態方法或工具類提供全局訪問入口。
在實際開發中,單例模式常用于管理數據庫連接、緩存客戶端、消息隊列連接等重量級對象。