How to run @BeforeClass multiple times

I have one basetest class in which I have written the code for instantiating the browser using the singelton pattern

public class BaseTest {
    public static  WebDriver driver;
    @BeforeClass(alwaysRun=true,groups={"dependx"})
    public static  WebDriver setBrowser()// double checked login using synchronized keyword will increase the time by 100
    {
        if(driver==null){
            synchronized(BaseTest.class){
                System.setProperty("webdriver.chrome.driver","/home/user/Downloads/driver/chromedriver");
                 driver = new ChromeDriver();   
            }
        }
        return driver;
    }
}

Now my code is running is sucessfully till I close the browser using quit or close method
Now the 2nd time when I am re-executing the same code its giving me

nosuchSession exception

here is my TestClass

public class SimpleBase1 {
    public SimpleBase1() {
        PageFactory.initElements(driver, this);
    }

    SimpleBase2 obj;
    FullLafdefy obj2;
    public WebDriver driver = BaseTest.setBrowser();

    @FindBy(xpath ="//a[@id ='yourRooms']/span[contains(text(),'Rooms: ')]")
    WebElement cartButton;
    @FindBy(xpath ="//a[@id='aLamps']")
    WebElement Lamps;

    @BeforeClass
    public void before(){
        obj = new SimpleBase2(driver);
        obj2 = new FullLafdefy(driver);
    }
    @Test(priority=1)
    public void navigateToSite(){
        System.out.println("Here it is  "+Constants.url.value);
        FullLafdefy.navigateToUrl(driver, Constants.returnUrl());
        System.out.println("pretty Please ");
    }

    @AfterClass
    public void tearDown(){
        driver.close();
        driver=null;
    }
}

Everything works fine upto this and I want to ensure the driver value should be equal to null so I inserted one extra line “driver=null;” after this

Now In my 2nd testClass

public class SignPageTest {
    public WebDriver driver = BaseTest.setBrowser();
    SignPage obj ;
    Boolean stu;


    @Test
    public void navigateToSignPage(){
    obj = new SignPage(driver);
    stu = obj.navigateToSignIn();
    }
    @Test(priority=2)
    public void getHandles(){
        stu = obj.handlingWindows();
    }

}

here is my testNG.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="Test1">
    <classes>
          <class name="TestPackageClasses.BaseTest"/>
          <class name="trialPackage.SimpleBase1"/>  
    </classes>
    </test>
    <test name="Test2">
    <classes>
         <class name="TestPackageClasses.BaseTest"/>
         <class name="TestPackageClasses.SignPageTest"/> 
    </classes>
    </test>
</suite>

Can someone please tell me how to re-execute the code of @BeforeClass or it maybe @BeforeTest multiple times