@Autowired装配实例
@Autowired 注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这样的:
<property name="属性名" value=" 属性值"/>
通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注解。
一、编写Bean类
CustomerDao接口:
package com.yiidian.dao;
/**
*
* @author http://www.yiidian.com
*
*/
public interface CustomerDao {
public void save();
}
CustomerDaoImpl实现类:
package com.yiidian.dao.impl;
import org.springframework.stereotype.Repository;
import com.yiidian.dao.CustomerDao;
/**
* @author http://www.yiidian.com
*
*/
@Repository(value="customerDao")
public class CustomerDaoImpl implements CustomerDao {
@Override
public void save() {
System.out.println("执行了CustomerDaoImpl的save()方法");
}
}
CustomerService接口:
package com.yiidian.service;
/**
*
* @author http://www.yiidian.com
*
*/
public interface CustomerService {
public void save();
}
CustomerServiceImpl实现类:
package com.yiidian.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yiidian.dao.CustomerDao;
import com.yiidian.service.CustomerService;
/**
*
* @author http://www.yiidian.com
*
*/
@Service(value="customerService")
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;
@Override
public void save() {
customerDao.save();
}
}
这里需要一个CustomerDao类型的属性,通过@Autowired自动装配方式,从IOC容器中去查找到,并返回给该属性。
二、配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 开启SpringIOC注解扫描 -->
<context:component-scan base-package="com.yiidian"></context:component-scan>
</beans>
三、编写测试类
package com.yiidian.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yiidian.service.CustomerService;
/**
* @author http://www.yiidian.com
*
*/
public class Demo1 {
@Test
public void test1(){
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService customerService = (CustomerService)ac.getBean("customerService");
customerService.save();
}
}
四、运行结果
那么使用@Autowired的原理是什么?
其实在启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
注意事项:
在使用@Autowired时,首先在容器中查询对应类型的bean
如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据
如果查询的结果不止一个,那么@Autowired会根据名称来查找。
如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false
热门文章
优秀文章