2017-09-20 10 views
0

J'essaye de tester la fonctionnalité d'injection de dépendances de ressort mais je rencontre des problèmes lorsque j'essaie de récupérer la valeur d'une variable d'instance en utilisant les méthodes getter de la classe Spring Bean. Obtention de la valeur nulle d'une variable d'instance précédemment définie.La méthode Getter rétablit la valeur NULL dans le ressort DI

Ma principale classe

public class Main { 
public static void main(String ... args) { 

    ApplicationContext context = new ClassPathXmlApplicationContext("BeanFactory.xml"); 
    IBackup dataWriterObj = (IBackup) context.getBean("writeBackupHDFS"); 
    backup backup = new backup(); 
    backup.setNickName("Abbey"); 
    String result = dataWriterObj.read("Ankur", "Bahre"); 
System.out.println(result); 
} 
} 

Bean classe

public class backup implements IBackup { 
private String nickName; 

public String getNickName() { 
    return nickName; 
} 

public void setNickName(String nickName) { 
    this.nickName = nickName; 
} 

public String read(String firstName, String lastName) { 
    String Name = "My Name is " + firstName + " " + lastName + " and my nickName is " + getNickName(); 
    return Name; 
} 
} 

Interface

public interface IBackup { 

public String read(String firstName, String lastName); 
} 

BeanFactory.xml

<bean id="writeBackupHDFS" class="test.backup"/> 

Output- escomptés My Name is Ankur Bahre and my nickName is Abbey

Actual Output- My Name is Ankur Bahre and my nickName is null

Quelqu'un peut-il suggérer c'est-ce que je suis absent?

Merci

Répondre

0

Utilisez dataWriterObj.setNickName("Abbey") au lieu de backup.setNickName("Abbey").

Parce que le code ci-dessous n'a aucune relation avec l'objet dataWriterObj.

backup backup = new backup(); 
    backup.setNickName("Abbey"); 

Edit:

Créer une autre classe avec le nom

public class Name { 
    private String nickName; 

    public String getNickName() { 
     return nickName; 
    } 

    public void setNickName(String nickName) { 
     this.nickName = nickName; 
    } 
} 

classe de sauvegarde de mise à jour avec le changement ci-dessus

public class backup implements IBackup { 

    @Autowired 
    Name nameObj; 

    public void setNameObj(Name nameObj) { 
     this.nameObj = nameObj; 
    } 

    public String read(String firstName, String lastName) { 
     String Name = "My Name is " + firstName + " " + lastName + " and my nickName is " + nameObj.getNickName(); 
     return Name; 
    } 
} 

Ajouter à conf fichier BeanFactory.xml:

<bean id="writeBackupHDFS" class="springboot.rest.backup"> 
      <property name="nameObj" ref="nameBean"/> 
      </bean> 
<bean id="nameBean" class="springboot.rest.Name"/> 

Mettre à jour maintenant principale méthode avec le code ci-dessous

ApplicationContext context = new ClassPathXmlApplicationContext("BeanFactory.xml"); 
     IBackup dataWriterObj = (IBackup) context.getBean("writeBackupHDFS"); 
     Name nameBean = (Name) context.getBean("nameBean"); 
    // backup backup = new backup(); 
     nameBean.setNickName("Abbey"); 
     String result = dataWriterObj.read("Ankur", "Bahre"); 
    System.out.println(result); 
+0

Je ne peux pas le faire comme dataWriterObj ne peut être utilisé pour les méthodes définies dans l'interface. Et je ne veux pas ajouter de méthodes setter et getter dans l'interface. –

+0

@AnkurBahre J'ai mis à jour la réponse avec l'implémentation DI. S'il vous plaît vérifier une fois – Sam

+0

La solution ci-dessus a fonctionné. Merci beaucoup –