2016-03-20 9 views
0

私は春の新機能です。スタンドアロンアプリケーションで@Autowiredアノテーションを使用しようとしていますが、できませんでした。ここで が私のメインクラスです@AutowiredアノテーションはSpringスタンドアロンアプリケーションでは機能しません

MainDemo.java

public class MainDemo { 
public static void main(String[] args) { 
    BeanFactory sf= new XmlBeanFactory(new FileSystemResource("beans.xml")); 

    SpringIntro a= (SpringIntro)sf.getBean("act"); 
    System.out.println(a.getResults()); 
} 

SpringIntro.java

@Service("act") 
public class SpringIntro { 

@Autowired 
AdminInterface adminDAO; 

public String getResults(){ 
    System.out.println("in spring intro"); 
    for(AdminBean ab:adminDAO.getAdminData()){ 
     System.out.println(ab.getAdministratiorName()); 
    } 
    return "sree"; 
} 
} 

Admininterface.java

public interface AdminInterface { 
    List<AdminBean> getAdminData(); 
    } 

AdminDao.java

public class AdminDao implements AdminInterface{ 
    @Autowired 
    public JdbcTemplate jdbcTemplate; 


    @Override 
    public List<AdminBean> getAdminData() { 
     // TODO Auto-generated method stub 
     System.out.println("admin dao autowired is working "+jdbcTemplate); 
     String sql = "select * from administrator"; 
     List<AdminBean> resultList = jdbcTemplate.query(sql, 
       new AdminMapping()); 
     return resultList; 
    } 

} 

<bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/dbschool" /> 
     <property name="username" value="root" /> 
     <property name="password" value="spinsci" /> 
    </bean> 
<bean id="jdbcTemplate" 
     class="org.springframework.jdbc.core.JdbcTemplate"> 

     <property name="dataSource" ref="dataSource" />  

    </bean> 

私はbeans.xmlファイルにadminDaoのための豆を追加した場合、私は、NULLポインタを取得しています主なメソッドを介してアプリケーションを実行beans.xmlの私は結果を得ていますが、もし私が@Autowiredを使用するなら、私は問題を抱えています。誰も私を助けることができますか?前もって感謝します。

答えて

1

あなたはXmlBeanFactoryを使用していますが、XmlBeanFactoryはBeanPostProcessorを実装せず、アノテーションを後処理しません。したがって、AutowiredAnnotationBeanPostProcessorは使用しません。そのため、ヌルポインター例外が発生する可能性があります。

代わりにApplicationContextを使用することをお勧めします。

+0

また、これの半分の必要性を排除するSpring Bootだけです。 – chrylis

+0

ありがとう、その働き。 –