Spring的配置相关知识(学习spring boot的预备知识)

  我们经常说的控制反转(Inversion of Control-IOC)和依赖注入(dependency injection-DI)在Spring环境下是等同的概念,控制反转是通过依赖注入实现的。所谓的依赖注入指的是容器负责创建对象和维护对象间依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。

  使用@ComponentScan,自动扫描包名下所有使用@Service、@Component、@Repository和@Controller的类

  使用AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数。  

  Java配置

  Java配置是Spring 4.x推荐的配置方式,可以完全替代xml配置;Java配置也是Spring boot推荐的配置。

  java配置是通过@Configuration和@Bean来实现的

    • @Configuration声明当前类是一个配置类,相当于一个spring配置的xml文件
    • @Bean 注解在方法上,声明当前方法的返回值为一个Bean      

  spring EL和资源调用

  Spring EL,支持在xml和注解中使用表达式,类似于JSP的EL表达式语言。

  

 1 @SpringBootApplication
 2 @PropertySource("classpath:com/el/test.properties")
 3 public class Ch522Application {
 4 
 5      @Value("普通字符串")
 6      private String normal;
 7 
 8     @Value("#{systemProperties['os.name']}")
 9     private String systemProperties;
10 
11     @Value("#{T(java.lang.Math).random()*100}")
12     private String math;
13 
14     @Value("classpath:com/el/test.text")
15     private Resource testFile;
16 
17     @Value("http://www.baidu.com")
18     private String url;
19 
20      @Value("${book.author}")
21      private String bookAuthor;
22 
23      @Value("${book.name}")
24      private String bookName;    //注入配置文件需使用@PropertySource指定文件地址,若使用@Value注入,则要配置一个PropertySourcesPlaceholderConfigurer的Bean。注意,@Value("${book.name}")使用的是$而不是#。注入Properties哈可以从Environment中获得
25 
26      @Autowired
27      private Environment Environment;
28 
29      @Bean
30      public static PropertySourcesPlaceholderConfigurer propertyConfigure(){
31          return new PropertySourcesPlaceholderConfigurer();
32      }
33 
34 }

 

profile

   Profile为在不同环境下使用不同的配置提供了支持(开发环境下的配置和生产环境下的配置)。

  三种方式

  • 通过设定Environment的ActiveProfiles来设定当前context需要使用的配置环境。在开发中使用@Profile注解类或者方法,达到在不同情况下选择实例化不同的bean;
  • 通过设定jvm的spring.profiles.active参数来设置配置环境;
  • web项目设置在Servlet的context parameter中;

 

事件(Application Event)

   spring的事件(Application Event)为Bean与Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另一个Bean知道并能做相应的处理。这时我们就需要让另一个Bean监听当前bean所发送的事件。

  步骤

  1. 自定义事件,继承ApplicationEvent类;
  2. 定义事件监听器,实现ApplicationListener<E>接口,E是上一步中创建的需要监听的事件,在类中使用onApplicationEvent方法对消息进行接收处理;
  3. 使用容器发布事件,使用ApplicationContext的publishEvent方法来发布;

 

 

posted @ 2017-04-18 09:05  kevin_shen  阅读(289)  评论(0编辑  收藏  举报