samedi 11 avril 2015

Strange situation with @Autowired

I have strange situation with @Autowired App's main class:



@Configuration
@EnableAutoConfiguration
@SpringBootApplication
@ComponentScan({"khartn", "khartn.torrentsuploader.processor"})
public class NewMain implements CommandLineRunner {

public static void main(String[] args) {

SpringApplicationBuilder builder = new SpringApplicationBuilder(NewMain.class);
builder.headless(false);
ConfigurableApplicationContext context = builder.run(args);
}

@Override
public void run(String... args) throws Exception {
}
}


Component class:



@Component("MyDirectoryReader")
public class MyDirectoryReader {

public MyDirectoryReader ( ) {
System.out.println("qqqqqqqqqqqqqqq");
}

public void readDir() {
try {
String initialPathStr = NewJFrame.jTextField1.getText();
System.out.println("initialPathStr " + initialPathStr);

Path dir = FileSystems.getDefault().getPath(initialPathStr);
DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{torrent}");
for (Path path : stream) {
System.out.println(path.getFileName());
}
stream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}


When application starting, I see, what MyDirectoryReader class is initialized:



2015-04-11 21:42:29.405 INFO 9375 --- [.NewMain.main()] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@13d6044f: startup date [Sat Apr 11 21:42:29 SAMT 2015]; root of context hierarchy
qqqqqqqqqqqqqqq


Config class:



@Configuration
@ComponentScan({"khartn", "khartn.torrentsuploader.processor"})
public class AppConfig {

@Bean(initMethod = "init")
public NewJFrame mainForm() {
System.out.println("init mainForm");
return new NewJFrame();
}

}


And in NewJFrame class have autowired field



public class NewJFrame extends javax.swing.JFrame {

@Autowired
@Qualifier(value = "MyDirectoryReader")
MyDirectoryReader myDirectoryReader;


But when NewJFrame showed and button pressed,



private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

if (myDirectoryReader == null) {
System.out.println("myDirectoryReader is null");
}
// myDirectoryReader.readDir();
}


then myDirectoryReader is null.


Why MyDirectoryReader is initialized as Component, but not autowired to the field?


Aucun commentaire:

Enregistrer un commentaire