为什么@autowired 不实例化我的领域?
why @autowired doos not instanciate my field?
我用的是Spring引导注解样式,查了几次都不明白,为什么注解字段returns为null。
请在我的java代码下方:
package app.ui;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class MyFrame extends JFrame {
private JMenu fileMenu;
private JMenuBar menuBar;
private JMenuItem openMenuItem;
@Autowired
MyDialog myDialog;
@Autowired
JdbcTemplate jdbcTemplate;
public MyFrame() {
initComponents();
setVisible(true);
}
private void initComponents() {
jdbcTemplate.toString();
this.setTitle("Vue de ma fenêtre");
this.setSize(new Dimension(300, 150));
this.setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new FlowLayout());
menuBar = new JMenuBar();
fileMenu = new JMenu();
openMenuItem = new JMenuItem();
fileMenu.setText("File");
openMenuItem.setText("Inscription");
openMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myDialog.setVisible(true);
}
});
fileMenu.add(openMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
//
final JButton cmd1 = new JButton("Créer Table");
getContentPane().add(cmd1);
cmd1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jdbcTemplate.execute("DROP TABLE customers IF EXISTS");
jdbcTemplate.execute(
"CREATE TABLE customer(id bigint(11), nom VARCHAR(55), prenom VARCHAR(55), dnaiss date)");
cmd1.setEnabled(false);
}
});
//
在此示例中,jdbcTemplate.toString()
returns 为空,我不明白为什么,因为它在下面的操作执行方法中起作用
感谢您的帮助。
这是 Java 初始化 class 的方式,第一个构造函数稍后执行 class 变量被初始化。直到并且除非变量是静态块的一部分。相同的逻辑后跟spring。
在您的示例中,jdbcTemplate 是一个 class 变量,jdbcTemplate.toString();通过默认构造函数调用,而 actionperformed 在 MyFrame 的实例上调用。
要了解更多关于 class 初始化的信息,请查看下面 link
我用的是Spring引导注解样式,查了几次都不明白,为什么注解字段returns为null。
请在我的java代码下方:
package app.ui;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@Service
public class MyFrame extends JFrame {
private JMenu fileMenu;
private JMenuBar menuBar;
private JMenuItem openMenuItem;
@Autowired
MyDialog myDialog;
@Autowired
JdbcTemplate jdbcTemplate;
public MyFrame() {
initComponents();
setVisible(true);
}
private void initComponents() {
jdbcTemplate.toString();
this.setTitle("Vue de ma fenêtre");
this.setSize(new Dimension(300, 150));
this.setLocationRelativeTo(null);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new FlowLayout());
menuBar = new JMenuBar();
fileMenu = new JMenu();
openMenuItem = new JMenuItem();
fileMenu.setText("File");
openMenuItem.setText("Inscription");
openMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myDialog.setVisible(true);
}
});
fileMenu.add(openMenuItem);
menuBar.add(fileMenu);
setJMenuBar(menuBar);
//
final JButton cmd1 = new JButton("Créer Table");
getContentPane().add(cmd1);
cmd1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jdbcTemplate.execute("DROP TABLE customers IF EXISTS");
jdbcTemplate.execute(
"CREATE TABLE customer(id bigint(11), nom VARCHAR(55), prenom VARCHAR(55), dnaiss date)");
cmd1.setEnabled(false);
}
});
//
在此示例中,jdbcTemplate.toString()
returns 为空,我不明白为什么,因为它在下面的操作执行方法中起作用
感谢您的帮助。
这是 Java 初始化 class 的方式,第一个构造函数稍后执行 class 变量被初始化。直到并且除非变量是静态块的一部分。相同的逻辑后跟spring。
在您的示例中,jdbcTemplate 是一个 class 变量,jdbcTemplate.toString();通过默认构造函数调用,而 actionperformed 在 MyFrame 的实例上调用。
要了解更多关于 class 初始化的信息,请查看下面 link