【发布时间】:2018-03-10 14:25:18
【问题描述】:
我正在尝试使用 JFrame 创建一个 Spring Boot 应用程序。我可以在 applicationContext 中看到我的 bean,但它们没有自动装配。我无法找到此问题的原因。有人可以帮我弄这个吗?
代码如下:
JavauiApplication - 它显示 userManager 和 userNameRepository 都是 bean
@SpringBootApplication
public class JavauiApplication implements CommandLineRunner {
@Autowired
private ApplicationContext appContext;
public static void main(String[] args) {
new SpringApplicationBuilder(JavauiApplication.class).headless(false).run(args);
java.awt.EventQueue.invokeLater(() -> new InputNameForm().setVisible(true));
}
@Override
public void run(String... args) throws Exception {
String[] beans = appContext.getBeanDefinitionNames();
Arrays.sort(beans);
for (String bean : beans) {
System.out.println(bean);
}
}
}
InputNameForm.java -> userManager 即将为空
@Component
public class InputNameForm extends javax.swing.JFrame {
/**
* Creates new form InputNameForm
*/
public InputNameForm() {
initComponents();
}
@Autowired
UserManager userManager;
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
userManager.setName(firstName.getText(), lastName.getText());
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(InputNameForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new InputNameForm().setVisible(true);
}
});
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JTextField firstName;
private javax.swing.JLabel firstNameLabel;
private javax.swing.JTextField lastName;
private javax.swing.JLabel lastNameLabel;
private javax.swing.JButton submitButton;
// End of variables declaration//GEN-END:variables
}
UserManager.java -> userNameRepository 即将为空
@Component
public class UserManager {
@Autowired
UserNameRepository userNameRepository;
public void setName(String firstName, String lastName) {
userNameRepository.save(new UserName(firstName, lastName));
System.out.println(userNameRepository.findAllByFirstName(firstName));
}
}
【问题讨论】:
-
您使用新关键字自己创建
InputNameForm的实例。 Spring 不知道该实例,因此不会注入任何东西。 -
@dunni 我自动装配了 InputNameForm,现在它也变成了 null。
-
它已修复。我将实例设为静态以在 void main 中调用。当我用 appContext.getBean(InputNameForm.class) 替换它时,一切正常
标签: spring swing spring-boot jframe