

Springを学習中です。  
本のサンプルコードを少し変えてみたのですが  
NullPointerExceptionになってしまいます。

[code]

    public class ProductSampleRun {
    
        @Autowired
        private ProductService productService;
    
        public static void main(String args[]){
            ProductSampleRun productSampleRun = new ProductSampleRun();
            productSampleRun.execute();
        }
    
        public void execute(){
    
            //BeanFactory ctx = new ClassPathXmlApplicationContext(
            //      "/spring/application-config.xml");
            //ProductService productService = ctx.getBean(ProductService.class);
    
            productService.addProduct(new Product("ホチキス",100));
    
            Product product = productService.findByProductName("ホチキス");
            System.out.println(product);
        }
    }
    
[/code]

付随情報として  
`ProductServiceImple`が`@Component`として登録されています。  
web.xmlに`ContextConfigLocation`と`ContextLoaderListener`を記述しています。  
application-configに`Component-Scan`を記述しています。

Springがまだ全然わかっていないのですが、Beanを取得する場合  
必ず`getBean`をしなければいけないのでしょうか?(コメント部)  
`@Autowired`でいけると思ったのですが・・。


CC BY-SA 3.0
2017-04-27T07:56:29.153
34315
2017-08-04T04:24:47.690
2017-04-27T09:24:14.050
19110
22813
question
java spring
Spring,Beanの取得について


SpringMVCでWebプロジェクトだと`@Autowired`や`@Resource`で行けるはずだが。

[code]

    public static void main(String args[]){
        ProductSampleRun productSampleRun = new ProductSampleRun();
        productSampleRun.execute();
    }
    
[/code]

だとProductSampleRunオブジェクトはSpringで管理されていないから、Autowiredが動かなかった。

[code]

    String[] xmlCfg = new String[] {"classpath:/spring/applicationContext-service.xml",
                "classpath:/spring/applicationContext-util.xml",
                "classpath:/spring/applicationContext.xml"}; 
    ApplicationContext context  = new FileSystemXmlApplicationContext(xmlCfg);
    // 获取inspectionUtil bean
    ProductSampleRun productSample = (ProductSampleRun) context.getBean(ProductSampleRun.class);
    
[/code]

のようにApplicationContext を利用してBeanを取得してみてください。


CC BY-SA 3.0
2017-06-09T10:08:09.973
35438
2017-06-09T22:28:02.193
2017-06-09T22:28:02.193
3068
23688
34315
answer