2

デスクトップアプリケーションでSpringを使用しようとしていますが、 JPanelのアクションメソッドで自動配線の問題に直面しています。

次のように、メイン メソッドに applicationContext をロードしています。

public static void main(String[] args) {

        new ClassPathXmlApplicationContext(
                "classpath:/META-INF/spring/applicationContext.xml");
            MainFrame frame = new MainFrame();
    Signup signup = new Signup();
    frame.add(signup);
    frame.setResizable(false);
    frame.setTitle("Please input your data");
    frame.setBounds(100, 100, 450, 180);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

}

問題なくロードされていることがわかります。

私のパネルコード:

@Component
public class Signup extends JPanel {


    @Autowired
    private UserDao userDao;

    public Signup() {



        JButton btn_submit = new JButton("Submit");
        btn_submit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                registerUser();
            }
        });



    }

    private void registerUser() {

        User newUser = new User();
        newUser.setName(username);
        newUser.setSalary(salary);
        userDao.addUser(newUser);

    }
}

これcontext:component-scanは適切に構成されており、私も使用してcontext:annotation-configいますが、常にNullPointerExceptionを取得しuserDao.addUser(newUser); ます。これは、依存性注入が正常に機能していないことを意味します。

この問題を修正する方法を教えてください。

更新: applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
                http://www.springframework.org/schema/beans     
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="${project.groupId}" />

    <context:annotation-config />

    <tx:annotation-driven transaction-manager="transactionManager" />

    <bean id="propertyPlaceholderConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>

                <value>classpath:messages/application.properties</value>

            </list>
        </property>
    </bean>


    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="${project.groupId}.domain" />


        <property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.DerbyDialect
                hibernate.show_sql=false
                hibernate.format_sql=false
                hibernate.hbm2ddl.auto=validate
            </value>
        </property>

    </bean>


    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">

        <property name="driverClassName" value="org.apache.derby.jdbc.EmbeddedDriver" />

        <property name="url" value="jdbc:derby:test" />

        <property name="username" value="root" />

        <property name="password" value="root" />

    </bean>


    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />


</beans>
4

1 に答える 1

8

デスクトップ環境で Spring を構成する場合ApplicationContext.

たとえば、Signupここに投稿したクラスを取得したい場合は、mainメソッドで次のようにします。

public static void main(String[] args) {
    ApplicationContext appContext = new ClassPathXmlApplicationContext(
            "classpath:/META-INF/spring/applicationContext.xml");
    Signup signup = appContext.getBean(Signup.class);
    //use signup here...
}

new Signup()クラスの新しいインスタンスを取得するために使用しSignupますが、Spring マネージド クラスにしたいので、思い通りに動作しません! (実際には、そのように機能させることができますが、それはここでの私の答えを超えています)

于 2012-07-08T22:26:47.513 に答える