我在Scala中遇到了一段代码如下:
@Singleton
class MyClass {
// ...
}
但我认为对象是单身人士,而课程则不是。这基本上等同于这个吗?
object MyClass {
// ....
}
编辑:这是what I'm looking at。
答案 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编译器创建并强制执行单例。