@Singleton是否与Scala中的对象相同?

时间:2017-03-16 16:54:53

标签: scala class singleton

我在Scala中遇到了一段代码如下:

@Singleton
class MyClass {
    // ...
}

但我认为对象是单身人士,而课程则不是。这基本上等同于这个吗?

object MyClass {
    // ....
}

编辑:这是what I'm looking at

2 个答案:

答案 0 :(得分:8)

@Singleton通常是指IOC(控制反转)框架中的托管单例,如Guice(请参阅Scopes)或Spring。

这与object不同,@Singleton是由ClassLoader管理的单身人士。

理论上,您可以使用同一类的不同object对象同时运行多个应用程序。但只要他们共享一个ClassLoader,他们都会使用相同的<?php //Step 1 $db = mysqli_connect('localhost', 'root', '', 'hospital') or die('Error connecting to MySQL server.'); ?> <html> <head> <meta http-equiv="refresh" content="20"> </head> <body> <h1> PHP connect to MySQL </h1> <table> <?php //Step 2 $query = "SELECT * FROM patients"; mysqli_query($db, $query) or die('Error querying database.'); $result = mysqli_query($db, $query); $row = mysqli_fetch_array($result); echo "<table border = '1'> <tr> <th>id</th> <th>patient_name</th> <th>check_in_date</th> <th>room_number</th> <th>bed_number</th> <th>notes</th> </tr>"; while($row = mysqli_fetch_array($result)){ echo "<tr>"; echo "<td>" . $row['id'] . "</td>"; echo "<td>" . $row['patient_name'] . "</td>"; echo "<td>" . $row['check_in_date'] . "</td>"; echo "<td>" . $row['room_number'] . "</td>"; echo "<td>" . $row['bed_number'] . "</td>"; echo "<td>" . $row['notes'] . "</td>"; echo "</tr>"; } echo "</table>"; //while($row = mysqli_fetch_array($result)){ // echo $row['id'] . ' ' .</tr> $row['patient_name']. ' ' . $row['check_in_date'] . ' ' . $row['room_number'] . ' ' . $row['bed_number'] . ' ' . $row['notes'] . '<br />'; //} ?> </table> </body> </html>

答案 1 :(得分:6)

没有。 @Singleton注释本身绝对没有任何意义。它旨在由依赖注入(DI)框架使用。 @Singleton向DI框架发出信号,如果另一个类(或许多)将其作为依赖项调用它,它应该只实例化该类的一个实例。

然而,没有什么可以阻止您手动实例化更多class MyClass实例。

使用object MyClass,您可以使用Scala编译器创建并强制执行单例。