使用Spring annotation编程的快感

前言

Spring的Bean Factory所实现的IoC轻量级容器,可以很方便地让大家基于POJO开发JavaEE应用程序。

创建应用对象之间协作关系的行为通常称为装配

Spring中有三种装配Bean的方法

  • 在XML中显式配置
  • 在Java中显式配置
  • 隐式的bean发现机制和自动装配

这儿要说的就是第三个“自动发现与装配”,它会带来编程的快感。

隐式的bean发现机制和自动装配

隐式配置分成两步 1、组件扫描 2、自动装配

组件扫描

组件扫描可以通过XML配置实现

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xmlns:context="http://www.springframework.org/schema/context"; xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd";> 

    <context:component-scan base-package="xyz.mrwood.study.spring.example" /> 
</beans>

自动装配

spring自动满足bean之间的依赖,通过Autowired来进行依赖的注入

@Component 
public class Waiter { 
    public void service(String name){ 
        System.out.println("service to " + name); 
    } 
}

@Component 
public class Store { 
    @Autowired 
    private Waiter waiter; 

    public void service(){ 
        waiter.service("kiwi"); 
    } 
}

spring中所有bean都会有一个ID,我们通过@Component设置的,自动扫描时会以类名首字母小写为ID。如果想要自定义就要设置@Component的参数。

@ComponentScan默认是扫描当前包以及子包。如果想设置其它包或者多个包,可以通过设置该注解的basePackages。但是这种是以字符串形式不利于重构。可以使用另外一个属性backPackageClasses指定某个类(开发中常用标记接口),然后spring会扫描这个类下面的包与子包。

可以使用java规范的@Named替换@Component,也可以使用java规范的@Inject去替换@Autowired

何来快感

工作最常用的是隐式配置,因为自动扫描非常方便,但是有些情况下只能使用显式的手动配置。比如引入一些第三方库,要想让spring管理这个bean。不可能修改它的源码。只能通过显式配置。

参考文档:http://blog.csdn.net/u0117192...

本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院