1

私のプロジェクトはスタンドアロンとして自動配線オプションで正常に動作し、このプロジェクトからjarファイルを作成します。このjarを親プロジェクトに追加した後、親プロジェクトで外部jarファイルのクラスを使用しようとすると、「例外スレッド"main"java.lang.NullPointerException..."。

ただし、外部jarファイルでautowiredオプションを使用せず、コード入力コンテキストを手動で記述した場合、外部jarファイルは親プロジェクトで正常に機能します。

Autowiredクラスの外部jarファイル

public class UserService {


@Autowired 
UserRepository userRepository;

@Autowired
Movie2Repository movieRepository;

@Autowired
PersonRepository personRepository;


ConfigurableApplicationContext context;
public UserService(){
    // context = new ClassPathXmlApplicationContext("META-INF/spring/application-context.xml");
}


public void closeApp(){

    //context.close();
}

public void  insert(){
     //userRepository = context.getBean(UserRepository.class);
     System.out.println("user vvvv");
     User u = new User();
     u.firstname="dede";
     userRepository.save(u);
     System.out.println("user eklendi");

外部jarファイルからのApplicationContextファイル

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:neo4j="http://www.springframework.org/schema/data/neo4j"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" 
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
    http://www.springframework.org/schema/data/neo4j http://www.springframework.org/schema/data/neo4j/spring-neo4j.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.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">

<!-- JPA -->

<context:property-placeholder
    location="/META-INF/spring/database.properties" />

<import resource="/database.xml"/>


<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

 <bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false" />
    <property name="database" value="MYSQL" />
</bean>


<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>

<jpa:repositories base-package="org.springframework.data.example.jpa" />

親プロジェクトパッケージファイル

package abcdef;
import org.springframework.data.example.*; 
import org.springframework.data.example.jpa.UserService;
import org.springframework.data.example.jpa.UserService2;

public class abcde {

        public static void main(String[] args) {
            // TODO Auto-generated method stub
            UserService u= new UserService();
            u.insert();

        }


}

親プロジェクトのApplicationContextファイル

<!-- JPA -->

<context:property-placeholder
    location="/META-INF/spring/database.properties" />

<import resource="/database.xml"/>

<import resource="classpath*:/META-INF/spring/*.xml" />


<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

 <bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false" />
    <property name="database" value="MYSQL" />
</bean>


<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="persistenceUnit" />
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
</bean>

<jpa:repositories base-package="org.springframework.data.example.jpa" />

親プロジェクトのコードを実行した後、次のエラーが発生しました。

 user vvvv
Exception in thread "main" java.lang.NullPointerException
    at org.springframework.data.example.jpa.UserService.insert(UserService.java:47)
    at abcdef.abcde.main(abcde.java:13)
4

1 に答える 1

1

ものすごく単純。Springコンテキストで作成し、Springコンテキストから取得しなかったUserServiceため、有線ではありません。new

public class abcde {

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("META-INF/spring/application-context.xml");
        UserService u = ctx.getBean("userService");
        u.insert();

    }
}

またはそのようなもの。

ただし、UserServicexml構成、またはSpring@Componentが実際に配線する構成に応じて不足しています。おそらく、外部jarからインポートするローカルのSpring構成ファイルを作成する必要があります。

于 2012-11-25T16:24:38.397 に答える