繁体   English   中英

Spring Bean在以下代码中的工作-如何保存/管理Bean属性?

[英]Working of Spring Bean in the following code - How are the Bean properties saved/managed?

我正打算根据流行的教程在Spring Security中实现用户日志记录,并且对spring bean的连接方式有疑问。

下面的类在Spring Context中被定义为标准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
public ActiveUserStore activeUserStore(){
    return new ActiveUserStore();
}

并且在下面的类中使用了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方法中的以下代码行如何自动将Ussers数据保存在ActiveUserStore Bean中?

users.add(user.getUsername());

为了清楚起见,我还在上面的代码中标记了这一行。

感谢任何帮助,因为我认为我对Bean的连接和使用方式的理解尚不清楚,因为我无法理解上述工作。 谢谢。

将Spring Bean视为通常的Java类。 由Spring在应用程序启动时实例化的此类仅一次(实际上并非总是如此,但默认情况下为true)

现在您进入了bean,您可以引用List变量并使用以下命令获取它:

List<String> users = activeUserStore.getUsers();

现在,用户变量包含对存储在bean中的列表的引用。 这是因为在Java对象中是通过引用传递的。

LoggedUser user = (LoggedUser) event.getValue();
if (!users.contains(user.getUsername())) {

这里的用户变量包含List类的引用。 列表类具有add方法,而LoggedUser具有getUsername方法。 当用户变量引用与bean属性包含的相同List对象时,这会将用户名添加到bean中:

    users.add(user.getUsername());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM