gpt4 book ai didi

java - Swing 应用程序中的 Hibernate 和 Spring

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:42 25 4
gpt4 key购买 nike

我是编程新手。我的 Swing 应用程序有问题。我想 session 有问题。我使用 Hibernate 并通过 Spring 配置它。当我按下按钮时,我想将信息添加到数据库,但我得到 NullPoinerException。也许我必须用另一种方式编写用户界面代码?需要您的帮助!谢谢。

这是我的代码:

主框架.java

public class MainFrame extends JFrame {

public MainFrame(){
setTitle("Title");
setSize(300,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
makeButtons();
setVisible(true);
}
public void makeButtons(){
JPanel panel=new JPanel();
panel.add(makeLoginField());
panel.add(makeLoginButton());
panel.add(makePassField());
panel.setVisible(true);
this.add(panel);
}
public JButton makeLoginButton(){
JButton loginButton=new JButton("Login");
loginButton.addActionListener(new Action());
return loginButton;
}
public JTextField makeLoginField(){
JTextField loginField=new JTextField();
loginField.setSize(new Dimension(134, 20));
return loginField;
}
public JPasswordField makePassField(){
JPasswordField passField=new JPasswordField();
passField.setSize(new Dimension(134, 20));
return passField;
}
public static void main(String[] args) {
JFrame m=new MainFrame();
}
}

Action.java

class Action implements ActionListener{
@Autowired
private UserServiceInterface userService;

public void setuserService(UserServiceInterface userService) {
this.userService=userService;
}
public void actionPerformed (ActionEvent e){
User u=new User();
u.setName("HellofromGUI");
userService.addUser(u);
}
}

用户服务.java

@Transactional
public class UserService implements UserServiceInterface{
@Autowired
private UserDaoInterface dao;

public void setDao(UserDaoInterface dao) {
this.dao = dao;
}
public void addUser(User u){
dao.insertRow(u);
}
public List getData(){
return dao.getDBValues();
}
}

用户道.java

public class UserDao implements UserDaoInterface{
@Autowired
private SessionFactory sessionFactory;

public void insertRow(User user) {
Session session = null;
session = sessionFactory.getCurrentSession();
session.save(user);

}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public List getDBValues() {
Session session = sessionFactory.getCurrentSession();
List<User> users = session.createCriteria(User.class).list();
return users;
}
}

beans.xml

<beans>

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

<bean id="userdao" class="dao.UserDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="userservice" class="service.UserService">
<property name="dao">
<ref bean="userdao" />
</property>
</bean>
<bean id="paymentdao" class="dao.PaymentDao">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="paymentservice" class="service.PaymentService">
<property name="dao">
<ref bean="paymentdao" />
</property>
</bean>
<bean id="usergui" class="ui.Action">
<property name="userService">
<ref bean="userservice" />
</property>
</bean>
</beans>

最佳答案

使用 Spring 需要记住的重要一点是它只能将引用注入(inject)到 Spring 管理的 bean 中。在您的代码中,您期望 Spring 将 UserService 的实例注入(inject)到您的 Action 类中。 Spring 应该正确地执行此注入(inject)到名为 usergui 的 Spring bean 中,但是,在您的 UI 中,您正在使用以下代码创建您自己的 Action 类实例:

loginButton.addActionListener(new Action());

任何时候你自己创建一个对象的实例,它不会被 Spring 管理,需要像对待任何 self 管理的对象一样对待,即手动设置所有必需的引用。

要获得您期望的结果,您需要更改 UI 逻辑以引用您在配置文件中定义的 Spring usergui bean。为了获得这个实例,您首先需要检索 Spring 的 BeanFactory' 的实例。以下是您的代码如何检索 usergui` 的正确实例的示例:

// using ClassPathResource, you can also use a FileResource or other method to load config
Resource res = new ClassPathResource("/beans.xml");
// initialize bean factory
BeanFactory factory = new XmlBeanFactory(res);

// retrieve Spring managed Action class
ActionListener action = factory.getBean("usergui", ActionListener.class);

// configure login button
loginButton.addActionListener(action);

示例代码引用了 ActionListener 而不是直接引用了 Action 类。通常在使用 Spring 时,您希望与由类实现的接口(interface) (ActionListener) 交互,而不是与类本身 (Action) 交互。这样做允许您更改为 bean usergui 引用的实现,例如 Action -> DifferentAction,而无需修改您的 UI 代码。

关于java - Swing 应用程序中的 Hibernate 和 Spring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com