Spring 子类之间共享变量的更好实现是什么
所以目前我有一个spring单元测试应用程序。它要求我从外部身份验证源获取会话cookie。问题是,这个身份验证过程相当昂贵且耗时,我正在尝试创建一个结构,其中我通过任何子类进行了一次身份验证,并且创建了任何后续子类,它将重用此会话cookie,而不会再次命中身份验证过程 我现在的问题是,每次创建另一个子类时,静态cookie都是空的。我一直在读到使用static作为全局变量是个坏主意,但我想不出其他方法来实现这一点,因为Spring framework在运行时设置了一些东西,以及我将如何设置cookie,以便所有其他类都可以使用它 另一条信息。变量正在使用中,但在运行时可以更改。它不是一个单一的用户登录并被广泛使用。但更像一个Sub1调用login,我们有一个cookie。然后,多个测试将使用该登录,直到SubX进入并说,我使用的是不同的凭证,所以我需要以其他身份登录。然后重复 以下是我的代码概要:Spring 子类之间共享变量的更好实现是什么,spring,unit-testing,inheritance,global-variables,subclass,Spring,Unit Testing,Inheritance,Global Variables,Subclass,所以目前我有一个spring单元测试应用程序。它要求我从外部身份验证源获取会话cookie。问题是,这个身份验证过程相当昂贵且耗时,我正在尝试创建一个结构,其中我通过任何子类进行了一次身份验证,并且创建了任何后续子类,它将重用此会话cookie,而不会再次命中身份验证过程 我现在的问题是,每次创建另一个子类时,静态cookie都是空的。我一直在读到使用static作为全局变量是个坏主意,但我想不出其他方法来实现这一点,因为Spring framework在运行时设置了一些东西,以及我将如何设置c
public class Parent implements InitializingBean {
protected static String BASE_URL;
public static Cookie cookie;
... All default InitializingBean methods ...
afterPropertiesSet() {
cookie = // login process returns a cookie
}
}
public class Sub1 extends Parent {
@resource public String baseURL;
@PostConstruct
public void init() {
// set parents with my baseURL;
BASE_URL = baseURL;
}
public void doSomething() {
// Do something with cookie, because it should have been set by parent class
}
}
public class Sub2 extends Parent {
@resource public String baseURL;
@PostConstruct
public void init() {
// set parents with my baseURL;
BASE_URL = baseURL;
}
public void doSomethingElse() {
// Do something with cookie, because it should have been set by parent class
}
}
public class CookieMonster implements InitializingBean {
private Map<String,CookieAndUrl> cookies = new ConcurrentHashMap<String,CookieAndUrl>();
public CookieAndCurl getCookie(String username) {
CookieAndUrl c = cookies.get(username);
if (c == null) {
c = b;// reauthenicate or get from file
}
}
public static CookieAndUrl {
private Cookie cookie;
private String baseUrl;
//getters and setters
}
}
public class Parent implements InitializingBean {
@Autowired
private CookieMonster cookieMonster;
private CookieAndUrl cu;
public void afterPropertiesSet() {
//maybe load which cookie you need here
cu = cookieMonster.getCookie("tim");
}
}
公共类CookieMonster实现初始化bean{
私有映射cookies=新的ConcurrentHashMap();
public CookieAndCurl getCookie(字符串用户名){
CookieAndUrl c=cookies.get(用户名);
如果(c==null){
c=b;//重新授权或从文件获取
}
}
公共静态CookieAndUrl{
私人饼干;
私有字符串baseUrl;
//接球手和接球手
}
}
公共类父级实现初始化bean{
@自动连线
私人库克怪物库克怪物;
私人厨师和厨师;
公共无效afterPropertiesSet(){
//也许在这里装上你需要的饼干
cu=cookieMonster.getCookie(“tim”);
}
}
Sub1和Sub2是否仅为访问Cookie而扩展父级?或者它们也衍生出其他功能?它也继承了许多其他功能,它不仅仅是Sub1或Sub2,更像是Sub1到100+,因为它是一个测试集合。Sub1、Sub2、。。。除了饼干?