在以下代码中使用 Spring Bean - Bean 属性如何 saved/managed?
Working of Spring Bean in the following code - How are the Bean properties saved/managed?
我正在尝试根据流行的教程在 Spring 安全性中实现用户日志记录,并且对 spring bean 的连接方式有疑问。
下面的class被定义为Spring上下文中的标准bean
public class ActiveUserStore {
public List<String> users;
public ActiveUserStore() {
users = new ArrayList<String>();
}
public List<String> getUsers() {
return users;
}
public void setUsers(List<String> users) {
this.users = users;
}
}
以上通过
定义为一个Bean
@Bean
public ActiveUserStore activeUserStore(){
return new ActiveUserStore();
}
下面class中使用了Bean,请注意users.add(user.getUsername());
@Component
public class LoggedUser implements HttpSessionBindingListener {
private String username;
private ActiveUserStore activeUserStore;
public LoggedUser(String username, ActiveUserStore activeUserStore) {
this.username = username;
this.activeUserStore = activeUserStore;
}
public LoggedUser() {}
@Override
public void valueBound(HttpSessionBindingEvent event) {
List<String> users = activeUserStore.getUsers();
LoggedUser user = (LoggedUser) event.getValue();
if (!users.contains(user.getUsername())) {
users.add(user.getUsername());//HOW IS THIS SAVED TO THE ACTIVEUSERSTORE BEAN
}
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
List<String> users = activeUserStore.getUsers();
LoggedUser user = (LoggedUser) event.getValue();
if (users.contains(user.getUsername())) {
users.remove(user.getUsername());//HOW IS THIS SAVED TO THE ACTIVEUSERSTORE BEAN
}
}
我的问题:由于 users 变量属于 ActiveUserStore Bean,因此 Logged User Class 的 valueBound 和 valueUnbound 方法中的以下代码行如何自动执行将用户数据保存在 ActiveUserStore Bean 中?
users.add(user.getUsername());
为了清楚起见,我还在上面截取的代码中标记了这一行。
感谢任何帮助,因为我认为我对 Beans 的连接和使用方式的理解可能不清楚,因为我无法理解上述工作。谢谢。
想Spring豆子照常Javaclass。 class 在应用程序启动时由 Spring 实例化一次(实际上这并不总是正确的,但默认情况下是)
现在你在你的 bean 中,你引用了 List 变量并通过以下方式获取它:
List<String> users = activeUserStore.getUsers();
现在 users 变量包含对存储在 bean 中的列表的引用。这是因为在 Java 中对象是通过引用传递的。
LoggedUser user = (LoggedUser) event.getValue();
if (!users.contains(user.getUsername())) {
这里的 users 变量包含列表 class 引用。 List class 有 add 方法,LoggedUser 有 getUsername 方法。由于用户变量 将 引用到与您的 bean 属性 包含的相同列表对象,这会将用户名添加到您的 bean:
users.add(user.getUsername());
}
我正在尝试根据流行的教程在 Spring 安全性中实现用户日志记录,并且对 spring bean 的连接方式有疑问。
下面的class被定义为Spring上下文中的标准bean
public class ActiveUserStore {
public List<String> users;
public ActiveUserStore() {
users = new ArrayList<String>();
}
public List<String> getUsers() {
return users;
}
public void setUsers(List<String> users) {
this.users = users;
}
}
以上通过
定义为一个Bean@Bean
public ActiveUserStore activeUserStore(){
return new ActiveUserStore();
}
下面class中使用了Bean,请注意users.add(user.getUsername());
@Component
public class LoggedUser implements HttpSessionBindingListener {
private String username;
private ActiveUserStore activeUserStore;
public LoggedUser(String username, ActiveUserStore activeUserStore) {
this.username = username;
this.activeUserStore = activeUserStore;
}
public LoggedUser() {}
@Override
public void valueBound(HttpSessionBindingEvent event) {
List<String> users = activeUserStore.getUsers();
LoggedUser user = (LoggedUser) event.getValue();
if (!users.contains(user.getUsername())) {
users.add(user.getUsername());//HOW IS THIS SAVED TO THE ACTIVEUSERSTORE BEAN
}
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
List<String> users = activeUserStore.getUsers();
LoggedUser user = (LoggedUser) event.getValue();
if (users.contains(user.getUsername())) {
users.remove(user.getUsername());//HOW IS THIS SAVED TO THE ACTIVEUSERSTORE BEAN
}
}
我的问题:由于 users 变量属于 ActiveUserStore Bean,因此 Logged User Class 的 valueBound 和 valueUnbound 方法中的以下代码行如何自动执行将用户数据保存在 ActiveUserStore Bean 中?
users.add(user.getUsername());
为了清楚起见,我还在上面截取的代码中标记了这一行。
感谢任何帮助,因为我认为我对 Beans 的连接和使用方式的理解可能不清楚,因为我无法理解上述工作。谢谢。
想Spring豆子照常Javaclass。 class 在应用程序启动时由 Spring 实例化一次(实际上这并不总是正确的,但默认情况下是)
现在你在你的 bean 中,你引用了 List 变量并通过以下方式获取它:
List<String> users = activeUserStore.getUsers();
现在 users 变量包含对存储在 bean 中的列表的引用。这是因为在 Java 中对象是通过引用传递的。
LoggedUser user = (LoggedUser) event.getValue();
if (!users.contains(user.getUsername())) {
这里的 users 变量包含列表 class 引用。 List class 有 add 方法,LoggedUser 有 getUsername 方法。由于用户变量 将 引用到与您的 bean 属性 包含的相同列表对象,这会将用户名添加到您的 bean:
users.add(user.getUsername());
}