基于注解的自动装配
一、@Autowired
该注解可对成员变量、成员方法和构造方法进行标注;若标注了成员变量,可不需要set方法。默认按类型(byType)匹配,若按名称(byName)匹配,则需要 @Qualifier注解的标注,限定其名称。@Autowired标注有一属性Required,默认为true,若Required=false,则存在实体对象时注入不存在就忽略。在启用自动注解 时必须启用自动注解驱动。
<!-- 启用自动注解驱动 --> <context:annotation-config></context:annotation-config>
<!-- 声明UserDao对象,交给spring创建 --> <bean name="uDao" class="com.lz.dao.impl.UserDaoImpl"/>
<!-- 声明UserService对象,交给spring创建 --> <bean name="uService" class="com.lz.service.impl.UserServiceImpl"><bean name="uDao2" class="com.lz.dao.impl.UserDaoImpl"/>
// uDao @Autowired private UserDao uDao; // 添加用户 public void addUserService() { System.out.println("用户添加service层"); uDao.addUser(); } // set get public void setuDao(UserDao uDao) { this.uDao = uDao; }
// uDao2 @Autowired
@Qualifier(uDao2)
private UserDao uDao;// 添加用户public void addUserService() {System.out.println("用户添加service层");uDao.addUser();}// set getpublic void setuDao(UserDao uDao) {this.uDao = uDao;}
二、@Resource
用于成员变量和set方法上;默认按名称(byName)匹配。解析时对应于bean的名称,类型(byType)对应于bean的类型。
//@Autowired标注成员变量 @Autowired @Qualifier("uDao2") private UserDao uDao;
//上述代码等价于@Resource @Resource(name=“uDao2”) private UserDao uDao; //也可以用于set方法标注 @Resource(name=“uDao2”) public void setuDao(UserDao uDao) { this.uDao= uDao; }
三、@Value
此注入弥补了上述两种类型无法进行单值类型注入的问题,如int 、long、String、boolean、Enum等。且不用担心类型转换问题,spring自动完成。一般情况下 @Value会与properties文件联合使用,可通过占位符或SpEL的方式进行注入。
// 直接传值的方式
@Value("nihao")
private String url;
//占位符方式 @Value("${jdbc.url}") private String url; // SpEL表达方式,其中代表XML配置中的id值 @Value("#{jdbcMiltproperties['jdbc.name']}") private String name; // 占位符方式 @Value("${jdbc2.url}") private String url2; @Value("${jdbc2.name}") private String name2; @Value("${jdbc2.password}") private String pw; // SpEL表达式,其中代表XML配置中的id值 @Value("#{jdbcMiltproperties['jdbc.url']}") private String surl; @Value("#{jdbcMiltproperties['jdbc.name']}") private String sname; @Value("#{jdbcMiltproperties['jdbc.password']}") private String spw;
xml文件:
<!-- properties文件配置 --> <!-- 基于占位符的方式 配置单个properties --> <!--<context:property-placeholder location="jdbc.properties"/> --> <!-- 基于占位符的方式 配置多个properties --> <context:property-placeholder location="jdbc.properties,jdbc2.properties"/> <!-- 基于SpEL表达式 配置单个properties--> <!-- <util:properties id="jdbcconfig" location="jdbc.properties"></util:properties> --> <!-- 基于SpEL表达式 配置多个properties --> <bean id="jdbcMiltproperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"> <list> <value>jdbc.properties</value> <value>SpELjdbc.properties</value> </list> </property> </bean>