我已经看到它在很多地方都写过,应将Spring应用程序的DAO和Service类限制为单例范围。
在我的应用程序中,我具有以下服务类别
@Service
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDAO customerDAO;
.......
parameterised methods only....
}
Run Code Online (Sandbox Code Playgroud)
和DAO班
@Repository
public class CustomerDAOImpl implements CustomerDAO {
@Autowired
private SessionFactory sessionFactory;
...............
parameterised methods only....
}
Run Code Online (Sandbox Code Playgroud)
由于我没有定义任何作用域,因此默认作用域是单例。因此,每个容器只将CustomerService和CustomerDAO实例化一次,而且DAO类在开始时仅自动连接到Service类一次。将成为一个繁重的请求 Web应用程序,这意味着(或这意味着?),数百个线程将使用两个类的相同实例。
那么在这种情况下如何保证线程安全?
以及在xml中定义的hibernate sessionfactory bean的范围呢?
我对spring mvc应用程序中的bean作用域和线程安全性非常困惑。Springsource文档没有清楚地为Web应用程序解释这些内容。
谁能为我解释在请求繁重的Web应用程序中使用bean作用域(用于DAO,Service,Controller和其他bean)的最佳实践吗?
任何解释这些的链接都会令我感激。
感谢您的建议。
首先,我已经查看了有关堆栈溢出的所有类似问题,但对我来说还没有任何效果.试图让JUnit使用Peter Tahchiev撰写的JUnit in Action第二版中的一个简单例子.
Calculator.java
public class Calculator {
public double add(double number1, double number2) {
return number1 + number2;
}
}
Run Code Online (Sandbox Code Playgroud)
CalculatorTest.java
import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class CalculatorTest {
@Test
public void testAdd() {
Calculator calc = new Calculator();
double result = calc.add(1,1);
assertEquals(2, result,0);
}
}
Run Code Online (Sandbox Code Playgroud)
我的文件夹:

我编译:
javac -cp junit-4.11.jar *.java
Run Code Online (Sandbox Code Playgroud)
编译后我的文件夹:

我尝试运行测试:
java -cp junit-4.11.jar;hamcrest-core-1.3.jar;. org.junit.runner.JUnitCore CalculatorTest
Run Code Online (Sandbox Code Playgroud)
这是我的输出:

当我尝试运行各个类时,jre找到它们但抛出了一个没有主要的方法错误,这是预期的:
java Calculator
java CalculatorTest
Run Code Online (Sandbox Code Playgroud)
输出(这是预期的,但它找到了类):

任何想法我怎么能得到JUnit /无论它是什么行为?
[编辑]
我运行所有命令C:\Users\Zach\Documents\docs\Code\JUnit
上面的截图是相同的文件夹.
我使用的是jdk1.7.0_45和jre7 …
我试图取出一个字符串中的所有标点符号和空格,我将使用Playfair Cipher加密.我无法弄清楚为什么这条线不起作用.
s = Regex.Replace(s, @"[^\w\s]", string.Empty);
Run Code Online (Sandbox Code Playgroud) 我试图生成一个介于0和100 000之间的10000个整数的文件,所以我可以在以后对它们进行MergeSort.
当我使用fstream生成文件时,我从未得到超过32760的整数.
下面的方法生成文件,然后将其读回并检查32750以上的任何整数.我通常在32750和32760之间得到3-5个整数.为什么会发生这种情况,我该如何解决?是种子问题还是随机函数的实际使用?
// sizeOfArray = 10000
void generateFile() {
ofstream fout("unsorted.txt");
srand(time(NULL));
// Generating the file
int num;
for(int i = 0; i < sizeOfArray; i++) {
num = rand() % 100000;
if(i < sizeOfArray-1)
//fout << i+1 << ": " << num << endl;
fout << num << endl;
else
//fout << i+1 << ": " << num;
fout << num;
}
// Reading the File Back
ifstream fin("unsorted.txt");
for(int i = 0; i < sizeOfArray; i++) …Run Code Online (Sandbox Code Playgroud)