public class org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter extends org.springframework.jdbc.datasource.DelegatingDataSource
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter
  super_class: org.springframework.jdbc.datasource.DelegatingDataSource
{
  private java.lang.String username;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.String password;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.String catalog;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private java.lang.String schema;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()

  private final java.lang.ThreadLocal<org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials> threadBoundCredentials;
    descriptor: Ljava/lang/ThreadLocal;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/lang/ThreadLocal<Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter$JdbcUserCredentials;>;

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
         0: .line 63
            aload 0 /* this */
            invokespecial org.springframework.jdbc.datasource.DelegatingDataSource.<init>:()V
         1: .line 77
            aload 0 /* this */
         2: .line 78
            new org.springframework.core.NamedThreadLocal
            dup
            ldc "Current JDBC user credentials"
            invokespecial org.springframework.core.NamedThreadLocal.<init>:(Ljava/lang/String;)V
            putfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.threadBoundCredentials:Ljava/lang/ThreadLocal;
         3: .line 63
            return
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;

  public void setUsername(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String username
         0: .line 90
            aload 0 /* this */
            aload 1 /* username */
            putfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.username:Ljava/lang/String;
         1: .line 91
            return
        end local 1 // java.lang.String username
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    2     1  username  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      username  

  public void setPassword(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String password
         0: .line 102
            aload 0 /* this */
            aload 1 /* password */
            putfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.password:Ljava/lang/String;
         1: .line 103
            return
        end local 1 // java.lang.String password
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    2     1  password  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      password  

  public void setCatalog(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String catalog
         0: .line 111
            aload 0 /* this */
            aload 1 /* catalog */
            putfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.catalog:Ljava/lang/String;
         1: .line 112
            return
        end local 1 // java.lang.String catalog
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    2     1  catalog  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      catalog  

  public void setSchema(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String schema
         0: .line 120
            aload 0 /* this */
            aload 1 /* schema */
            putfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.schema:Ljava/lang/String;
         1: .line 121
            return
        end local 1 // java.lang.String schema
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    2     1  schema  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      schema  

  public void setCredentialsForCurrentThread(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=3
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String password
         0: .line 135
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.threadBoundCredentials:Ljava/lang/ThreadLocal;
            new org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials
            dup
            aload 1 /* username */
            aload 2 /* password */
            invokespecial org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials.<init>:(Ljava/lang/String;Ljava/lang/String;)V
            invokevirtual java.lang.ThreadLocal.set:(Ljava/lang/Object;)V
         1: .line 136
            return
        end local 2 // java.lang.String password
        end local 1 // java.lang.String username
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    2     0      this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    2     1  username  Ljava/lang/String;
            0    2     2  password  Ljava/lang/String;
    MethodParameters:
          Name  Flags
      username  
      password  

  public void removeCredentialsFromCurrentThread();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
         0: .line 144
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.threadBoundCredentials:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.remove:()V
         1: .line 145
            return
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;

  public java.sql.Connection getConnection();
    descriptor: ()Ljava/sql/Connection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
         0: .line 158
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.threadBoundCredentials:Ljava/lang/ThreadLocal;
            invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
            checkcast org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials
            astore 1 /* threadCredentials */
        start local 1 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials threadCredentials
         1: .line 159
            aload 1 /* threadCredentials */
            ifnull 3
         2: .line 160
            aload 0 /* this */
            aload 1 /* threadCredentials */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials.username:Ljava/lang/String;
            aload 1 /* threadCredentials */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials.password:Ljava/lang/String;
            invokevirtual org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection:(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
            goto 4
         3: .line 161
      StackMap locals: org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.username:Ljava/lang/String;
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.password:Ljava/lang/String;
            invokevirtual org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection:(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
         4: .line 159
      StackMap locals:
      StackMap stack: java.sql.Connection
            astore 2 /* con */
        start local 2 // java.sql.Connection con
         5: .line 163
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.catalog:Ljava/lang/String;
            ifnull 7
         6: .line 164
            aload 2 /* con */
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.catalog:Ljava/lang/String;
            invokeinterface java.sql.Connection.setCatalog:(Ljava/lang/String;)V
         7: .line 166
      StackMap locals: java.sql.Connection
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.schema:Ljava/lang/String;
            ifnull 9
         8: .line 167
            aload 2 /* con */
            aload 0 /* this */
            getfield org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.schema:Ljava/lang/String;
            invokeinterface java.sql.Connection.setSchema:(Ljava/lang/String;)V
         9: .line 169
      StackMap locals:
      StackMap stack:
            aload 2 /* con */
            areturn
        end local 2 // java.sql.Connection con
        end local 1 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials threadCredentials
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   10     0               this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            1   10     1  threadCredentials  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter$JdbcUserCredentials;
            5   10     2                con  Ljava/sql/Connection;
    Exceptions:
      throws java.sql.SQLException

  public java.sql.Connection getConnection(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String password
         0: .line 178
            aload 0 /* this */
            aload 1 /* username */
            aload 2 /* password */
            invokevirtual org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.doGetConnection:(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
            areturn
        end local 2 // java.lang.String password
        end local 1 // java.lang.String username
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    1     1  username  Ljava/lang/String;
            0    1     2  password  Ljava/lang/String;
    Exceptions:
      throws java.sql.SQLException
    MethodParameters:
          Name  Flags
      username  
      password  

  protected java.sql.Connection doGetConnection(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
        start local 1 // java.lang.String username
        start local 2 // java.lang.String password
         0: .line 193
            aload 0 /* this */
            invokevirtual org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getTargetDataSource:()Ljavax/sql/DataSource;
            ifnull 1
            iconst_1
            goto 2
      StackMap locals:
      StackMap stack:
         1: iconst_0
      StackMap locals:
      StackMap stack: int
         2: ldc "'targetDataSource' is required"
            invokestatic org.springframework.util.Assert.state:(ZLjava/lang/String;)V
         3: .line 194
            aload 1 /* username */
            invokestatic org.springframework.util.StringUtils.hasLength:(Ljava/lang/String;)Z
            ifeq 5
         4: .line 195
            aload 0 /* this */
            invokevirtual org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getTargetDataSource:()Ljavax/sql/DataSource;
            aload 1 /* username */
            aload 2 /* password */
            invokeinterface javax.sql.DataSource.getConnection:(Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;
            areturn
         5: .line 198
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter.getTargetDataSource:()Ljavax/sql/DataSource;
            invokeinterface javax.sql.DataSource.getConnection:()Ljava/sql/Connection;
            areturn
        end local 2 // java.lang.String password
        end local 1 // java.lang.String username
        end local 0 // org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    6     0      this  Lorg/springframework/jdbc/datasource/UserCredentialsDataSourceAdapter;
            0    6     1  username  Ljava/lang/String;
            0    6     2  password  Ljava/lang/String;
    Exceptions:
      throws java.sql.SQLException
    RuntimeVisibleParameterAnnotations: 
      0:
        org.springframework.lang.Nullable()
      1:
        org.springframework.lang.Nullable()
    MethodParameters:
          Name  Flags
      username  
      password  
}
SourceFile: "UserCredentialsDataSourceAdapter.java"
NestMembers:
  org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials
InnerClasses:
  private final JdbcUserCredentials = org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter$JdbcUserCredentials of org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter