如果通过配置beans.xml的方式对属性进行注入,需要编写大量的xml代码,造成了配置文件的臃肿,为了解决这个问题,spring提供了在JAVA代码中通过注解的方式来对属性进行装配。
方法三:通过注解方式对属性进行注入
第一步:要使用注解方式进行装备,首先需要修改beans.xml文件,让spring打开注解功能:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <!-- 引入 context 命名空间 --> xmlns:context = "http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd <!-- 加入 context scheme文件 --> http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <!-- 打开注解功能 --> <context:annotation-config/> ...... </beans>
第二步:依然是将需要交给Spring管理的类配置到beans.xml文件中
<bean name="personDao" class="com.risetek.dao.impl.PersonDaoImpl"/> <bean name="personServiceBean" class="com.risetek.service.impl.PersonServiceBean"/>
第三步:在java类中为需要注入的属性加上注解
这里有两种注解可以使用:
1. @Resource 该注解是jdk1.5提供的一个注解类型,因此使用该注解不会使代码跟spring框架产生太大的耦合,建议在开发过程中使用该注解,该注解在默认装配过程中首先根据名称来进行装配,再根据类型进行装配
public class PersonServiceBean implements PersonService { //1.name属性指定spring容器中管理的bean的名称(如果指定了name属性,则如果spring容器会只按照name属性指定的bean名称来进行装配 //2.如果不指定name属性,那么容器会首先会按照属性的名称在spring容器中查找bean类进行装配,如果找不到bean类则再按照属性的类型进行装配 @Resource(name="personDao") private PersonDao personDao; //用注解方式则不需要提供属性的set方法了 // public void setPersonDao(PersonDao personDao){ // this.personDao = personDao; // } }
也可以将注解用到set方法上
public class PersonServiceBean implements PersonService { private PersonDao personDao; @Resource(name="personDao") public void setPersonDao(PersonDao personDao){ this.personDao = personDao; } }
2. @Aotuwire 该注解是有spring提供的一个注解类型,默认情况下(不配置@Qualifier注解)它会按类型来装配属性
public class PersonServiceBean implements PersonService { //如果指定了required值为true,则如果找不到合适的bean进行装配,则会抛出异常,如果值为false,则找不到bean装配会将属性值装配为null @Autowired(required=true) //不指定@Qualifier注解时,默认按照属性类型进行装配 //在指定了@Qualifier后,则只会按照@Qualifier指定的名称进行装配 @Qualifier("personDao") private PersonDao personDao; }
同样也可以将注解写在set方法上
public class PersonServiceBean implements PersonService { private PersonDao personDao; @Autowired @Qualifier("personDao") public void setPersonDao(PersonDao personDao){ this.personDao = personDao; } }