用JSR的@Inject代替@Autowired完成自动装配

从spring3.0开始spring支持JSR-330 的标准注解。主要是javax.inject这个包下的:

下面的例子用@Inject代替@Autowired。完成自动装配:

MovieFinder的代码如下:
package com.timo.demo;

import org.springframework.stereotype.Component;

@Component
public class MovieFinder {
    private String name;
    public void findMovies(){
        System.out.println("1,2,3");
    }
}

SimpleMovieLister的代码如下:

package com.timo.demo;

import org.springframework.stereotype.Component;

import javax.inject.Inject;
import javax.inject.Provider;
@Component
public class SimpleMovieLister {
    @Inject
    private Provider<MovieFinder> movieFinder;

    public void setMovieFinder(Provider<MovieFinder> movieFinder) {
        this.movieFinder = movieFinder;
    }
    public void listMovies(){
        movieFinder.get().findMovies();;
    }
}

配置类的代码如下:

package com.timo.demo;

import org.springframework.context.annotation.ComponentScan;

@ComponentScan(basePackageClasses = DemoAppConfig.class)
public class DemoAppConfig {
}

测试类的代码如下:

package com.timo.demo;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Test {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(DemoAppConfig.class);
        SimpleMovieLister movieLister = applicationContext.getBean(SimpleMovieLister.class);
        movieLister.listMovies();
    }
}

 

posted @ 2017-11-30 14:36  技术让世界更精彩  阅读(987)  评论(0编辑  收藏  举报