Bean的元数据配置,除了可以通过xml文件来配置,还可以通过注解来进行配置。比较常用的注释有:@Required,@Autowired,@Qualifier还有一些JSR注解。
@Required
@Required主要是用来标注set方法,被标注的set方法,一定要在配置文件里进行显示说明配置,否则会抛出 BeanInitializationException。
@Autowired
@Autowired可以用来标注属性和标注方法。当用@Autowired对属性进行标注时,可以将属性的set方法删去,并且不需要在配置文件中显示配置,IoC就会通过byType(自动装配的一种方法)的方式自动将数据注入到bean中。
可以看到,不需要再在student的bean里面显示声明就会自动注入到对象中。
当@Autowired注释到构造方法上的时候,则将会对该方法的参数进行自动配置。
bean的配置文件,再运行时得到的结果与注释到set时是一样的。
@Autowired注解到其他方法时,与注解到成员变量时类似。当某些属性被设置成@Autowired时,若在配置文件中不存在相应的bean,则会跳出相应的异常;这时,可以通过@Autoowired(required=false)来跳过该类的配置。
@Qualifier
若在bean的xml文件中加入多个同样是Classroom类的bean时,Spring在构造时会默认选择第一个bean。若想指定相应的bean,可以通过@Qualifier注解,通过@Qualifier(“bean的id”/“qualifier的value值”),就可以指定注入相应的bean。
@Component
@Component注解主要是将一个类声明成对应xml文件里的一个bean标签
使用@Component注解,相当于在配置文件中写下:<bean id="senior" class="edu.stu.pojo"/>,还有其他类似的注解,如:@Reposity、@Service、@Controller这些注解的作用和@Component类似,只是其代表着的是不同的层(持久层、服务层和控制层),而@Component主要是用在较为中立的层中。
使用JSR注释
Spring还支持JSR规范的注释
@Resource
@Resource与@Autowired的注释作用相似,可是@Resource可以制定ByType或者通过ByName方法来进行自动配置;当只是使用默认的@Resource时,其实按照ByType的方式来进行自动配置;而当加入属性name时,则会按照ByName方式来实现自动配置。
若是将name属性删去,因为有多个classsroom的bean,所以运行结果则会抛出NoUniqueBeanDefinitionException的异常。
反思感受
通过注解来对bean进行配置,其实本质上还是需要编写xml文件,只是利用注解,可以在一定程度上简化xml文件的编写。
其实Spring支持的JSR规范还有其他,上面只是简单地介绍@Resource注解;在使用JSR注解之前,需要注册BeanPostProcessor,使用的是下面的语句
可是可以通过<context:annotion-config/>来简化相应的配置。