在以下代码中使用Spring Bean - 如何保存/管理Bean属性?

时间:2017-08-04 07:33:40

标签: java spring spring-mvc spring-boot javabeans

我想在一个流行的教程的基础上实现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 through

@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
    }
}

我的问题:由于用户变量属于ActiveUserStore Bean,因此logB用户类的valueBound和valueUnbound方法中的以下代码行如何自动将用户数据保存在ActiveUserStore Bean中?

  

users.add(user.getUsername());

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

任何帮助都表示赞赏,因为我认为我对Beans如何连接和使用的理解可能并不清楚,因为我无法理解上述工作。感谢。

1 个答案:

答案 0 :(得分:1)

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

现在你在bean里面,你引用了List变量并得到它:

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

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

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

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

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